2013-10-23 46 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