Clang编译器提供了许多有用的运行时检查,例如, -fsanitize=unsigned-integer-overflow
。当其中一个检查失败时,我可以打印回溯(例如使用gdb)吗?目前我得到问题的确切位置,但我没有上下文。我如何从这些运行时检查中获得更多信息,特别是回溯?Clang运行时检查:打印回溯
3
A
回答
1
不需要启用致命错误的更简单的解决方案是设置env。变量UBSAN_OPTIONS=print_stacktrace=1
。
0
可以进行的程序中使用这些标志中止:
-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?"
相关问题
- 1. 在C++中打印完全回溯
- 2. Python仅打印最后一个回溯?
- 3. 崩溃处理程序打印回溯
- 4. 隐藏在shell中打印回溯
- 5. 打印堆栈指针VS回溯()打印输出
- 6. 运行时打印出shell_exec
- 7. 在运行时打印Perl?
- 8. 为什么打印回溯时Python从当前目录读取?
- 9. 打印检查板
- 10. 打印MySQLdb运行的实际查询?
- 11. Django查询回溯
- 12. XText正确打开回溯
- 13. 打印运行时usercontrol silverlight 4
- 14. 打印登录发布运行时
- 15. 在运行时打印callstack(XCode)
- 16. 在运行时打印EntityFramework版本
- 17. 在SSRS打印检查?
- 18. 运行时检查失败
- 19. 如何检查“运行时”
- 20. 运行时Scala类检查
- 21. 检查,并在运行时
- 22. 检查Android运行时
- 23. Buildbot - 回溯查询更改问题时
- 24. 如何打印JavaScript的异常完整回溯?
- 25. 如何从回溯堆栈打印第一线
- 26. 如何在android chromium中打印函数调用回溯?
- 27. 在断言线上打印回溯“结束”,在Python3 unittest addFailure
- 28. 使用lxml xml模式验证打印回溯
- 29. 怎么写我自己的功能,打印回溯
- 30. Html表打印时打印行
使用中止可能是大型应用非常低效的,因为你大大增加延迟修正一个错误(你必须要经过漫长的检测修复,重建 - 部署 - 测试周期每一个错误)。 – yugr
但是在GDB中,您可以将调用堆栈上传到中止,完成功能和信号0继续。也就是说,如果您在此阶段发现代码中存在许多问题,则可能需要在单元测试,代码审查和其他开发过程中查找问题。 –
哦,是的,下次当你得到一个任务来清理整个Linux发行版并报告你的发现时,告诉开发人员。 – yugr