2012-09-17 48 views
1

我有一個C編譯好的大程序,但是當我運行它(./a.out)時,得到:總線錯誤10! 我用gdb調試器來跟蹤內存錯誤,但奇怪的是,程序在gdb內正常完成......可以解釋這種行爲,我怎麼會現在調試我的代碼?gdb中的總線錯誤消失

+4

http://en.wikipedia.org/wiki/Heisenbug – ouah

+0

嘗試在valgrind而不是gdb下運行它。 –

回答

1

在某些操作系統上,gdb會在gdb中以不同的方式加載程序。我知道在MacOS上,gdb將禁用一些地址空間佈局隨機化,這會改變共享庫的重定位方式。在某些操作系統上,gdb會加載比正常程序執行更多的部分,或者加載具有更寬權限的部分(非可執行內存可能在gdb下可執行,或者只讀將變爲可寫)。

最好的辦法是抓住問題的核心轉儲並繼續從那裏調試。 Valgrind也擅長捕捉這類錯誤。

+0

問題實際上只在MacOS上。 Valgrind在osx 10.8中沒有工作,所以我可能會切換到一個Linux平臺來避免大驚小怪。 – chemeng