Clang编译器提供了许多有用的运行时检查,例如-fsanitize=unsigned-integer-overflow
。当其中一个检查失败时,我可以打印回溯(例如使用gdb)吗?目前我得到问题的确切位置,但我没有上下文。如何从这些运行时检查中获取更多信息,尤其是回溯?
答案 0 :(得分:1)
一个不需要启用致命错误的简单解决方案是设置env。变量UBSAN_OPTIONS=print_stacktrace=1
。
答案 1 :(得分:0)
可以使用这些标志使程序中止:
-fsanitize=undefined-trap -fsanitize-undefined-trap-on-error -ftrap-function=abort
最后一个选项会导致调用abort;您可以在GDB下运行该程序,并在程序中止后打印回溯。
来源 - answer to "Will any programs detect a buffer overflow within a C/C++ structure?"