5

Clang 编译器提供了许多有用的运行时检查,例如-fsanitize=unsigned-integer-overflow. 当其中一项检查失败时,我可以打印回溯(例如使用 gdb)吗?目前我得到了问题的确切位置,但我没有上下文。我怎样才能从这些运行时检查中获得更多信息,尤其是回溯?

4

2 回答 2

4

一个不需要启用致命错误的更简单的解决方案是设置 env. 变量UBSAN_OPTIONS=print_stacktrace=1

于 2016-11-22T10:46:41.617 回答
0

可以使用这些标志使程序中止:

-fsanitize=undefined-trap -fsanitize-undefined-trap-on-error -ftrap-function=abort

最后一个选项导致调用 abort;您可以在 GDB 下运行程序并在程序中止后打印回溯。

来源 -回答“任何程序都会检测到 C/C++ 结构中的缓冲区溢出吗?”

于 2016-11-22T11:27:47.020 回答