2013-12-19 28 views
1

我的C程序墜毀在CentOS 5.7以下日誌:找到其中的libc我段錯誤發生

kernel: [1030648.130682] myapp[16454]: segfault at 0 ip b765f683 sp bfc3fa0c error 4 in libc-2.5.so[b75ee000+157000] 

似乎libc中引起段錯誤的呼叫。我怎麼知道在libc的哪個函數中發生了段錯誤?

這是一個產品環境,沒有留下coredump文件;它很少再現。所以,我現在可以做的是分析libc中的哪個函數(由我的程序調用)導致此段錯誤,然後我可以檢查我的代碼。

如果有指針可以解釋這些數字的含義:ip b765f683,sp bfc3fa0c,錯誤4,b75ee000 + 157000,那將會很棒。我GOOGLE了,但沒有找到很好的參考。

謝謝。

+2

你試過用你的標題搜索嗎? http://www.unknownroad.com/rtfm/gdbtut/gdbsegfault.html http://stackoverflow.com/questions/13337472/where-is-my-segmentation-fault – RedX

+0

這就是爲什麼我們用'-g'標誌編譯,[使用像gdb這樣的工具](http://www.centos.org/docs/3/html/rhel-devtools-en-3/s1-gdb-debugging.html):所以我們可以自己解決,而不是使用Q&A站點作爲交互式調試器 –

+1

抱歉,我不打算將此站點用作交互式調試器。我的問題是,sgefault發生在產品環境,沒有coredump文件;並且它很少再使用gdb來查看它發生的位置不起作用(因爲它不會崩潰)。所以,我現在可以做的是分析libc中的哪個函數(由我的程序調用)導致此段錯誤,然後我可以檢查我的代碼。 如果有解釋這些數字意味着什麼的指針會很棒:ip b765f683,sp bfc3fa0c,錯誤4,b75ee000 + 157000。我GOOGLE了,但沒有找到很好的參考。 –

回答

0

通常,分段錯誤是您的應用程序試圖訪問某些未經授權/未受干擾的內存區域的標誌。使用-g開關編譯代碼,然後使用一些內存調試程序(如)運行生成的二進制文件,並檢查valgrind的輸出是什麼。大多數情況下,你會得到導致錯誤的錯誤電話。

0

編譯使用-ggdb開關(使用gcc)並使用gdb找出崩潰的來源在哪裏......這個tutorial是非常有用的。

相關問題