【发布时间】:2013-11-01 12:45:21
【问题描述】:
Clang 编译器提供了许多有用的运行时检查,例如-fsanitize=unsigned-integer-overflow。当其中一项检查失败时,我可以打印回溯(例如使用 gdb)吗?目前我得到了问题的确切位置,但我没有上下文。如何从这些运行时检查,尤其是回溯?
【问题讨论】:
Clang 编译器提供了许多有用的运行时检查,例如-fsanitize=unsigned-integer-overflow。当其中一项检查失败时,我可以打印回溯(例如使用 gdb)吗?目前我得到了问题的确切位置,但我没有上下文。如何从这些运行时检查,尤其是回溯?
【问题讨论】:
不需要启用致命错误的更简单的解决方案是设置 env.变量UBSAN_OPTIONS=print_stacktrace=1。
【讨论】:
可以使用这些标志中止程序:
-fsanitize=undefined-trap -fsanitize-undefined-trap-on-error -ftrap-function=abort
最后一个选项导致调用中止;您可以在 GDB 下运行程序并在程序中止后打印回溯。
来源 - answer to "Will any programs detect a buffer overflow within a C/C++ structure?"
【讨论】:
finish 函数和 signal 0 继续。也就是说,如果您在这个阶段发现代码中有很多问题,您可能需要在单元测试、代码审查和开发过程的其余部分中寻找问题。