2013-10-23 49 views

回答

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?"

+0

使用中止可能是大型应用非常低效的,因为你大大增加延迟修正一个错误(你必须要经过漫长的检测修复,重建 - 部署 - 测试周期每一个错误)。 – yugr

+0

但是在GDB中,您可以将调用堆栈上传到中止,完成功能和信号0继续。也就是说,如果您在此阶段发现代码中存在许多问题,则可能需要在单元测试,代码审查和其他开发过程中查找问题。 –

+0

哦,是的,下次当你得到一个任务来清理整个Linux发行版并报告你的发现时,告诉开发人员。 – yugr