我有一個C編譯好的大程序,但是當我運行它(./a.out)時,得到:總線錯誤10! 我用gdb調試器來跟蹤內存錯誤,但奇怪的是,程序在gdb內正常完成......可以解釋這種行爲,我怎麼會現在調試我的代碼?gdb中的總線錯誤消失
1
A
回答
1
在某些操作系統上,gdb會在gdb中以不同的方式加載程序。我知道在MacOS上,gdb將禁用一些地址空間佈局隨機化,這會改變共享庫的重定位方式。在某些操作系統上,gdb會加載比正常程序執行更多的部分,或者加載具有更寬權限的部分(非可執行內存可能在gdb下可執行,或者只讀將變爲可寫)。
最好的辦法是抓住問題的核心轉儲並繼續從那裏調試。 Valgrind也擅長捕捉這類錯誤。
+0
問題實際上只在MacOS上。 Valgrind在osx 10.8中沒有工作,所以我可能會切換到一個Linux平臺來避免大驚小怪。 – chemeng
相關問題
- 1. SCANF失敗,總線錯誤
- 2. Windows服務總線消息消失
- 3. 總線錯誤
- 4. 總線錯誤
- 5. 總線錯誤:10錯誤
- 6. 消息總線中的總線發現
- 7. 使用gdb運行時,致命錯誤消失
- 8. 獲取「總線錯誤10」錯誤消息?
- 9. OpenCL總線錯誤
- 10. CUDA - 總線錯誤
- 11. 總線錯誤10
- 12. pthread總線錯誤
- 13. GDB錯誤消息:DW_OP_reg,DW_OP_piece和DW_OP_bit_piece
- 14. fopen()上的總線錯誤?
- 15. Python的CGEventTap總線錯誤
- 16. GDB遠程調試失敗,錯誤E01
- 17. Laravel錯誤消失
- 18. C中的總線錯誤struct
- 19. 二維數組中的總線錯誤
- 20. Linux中的TCP總線錯誤
- 21. cron作業中的總線錯誤
- 22. SIGSEV錯誤(gdb)
- 23. NSight gdb錯誤
- 24. C編程總線錯誤/段錯誤
- 25. 運行時錯誤總是在乾淨的構建後消失
- 26. 總線錯誤:10,在C
- 27. 什麼是'總線錯誤?'
- 28. CAN總線確認錯誤
- 29. 總線錯誤使用strsep()
- 30. malloc /總線錯誤與fprintf
http://en.wikipedia.org/wiki/Heisenbug – ouah
嘗試在valgrind而不是gdb下運行它。 –