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