有時一個Linux守護進程守護程序我用C寫獲取這些錯誤消息:調試用C語言編寫
[Fri Dec 30 07:58:54 2016] listend[13944]: segfault at 0 ip b7601e22 sp bf901d00 error 4 in libc-2.19.so[b7575000+1a7000]
[Fri Dec 30 07:58:54 2016] listend[13948]: segfault at 0 ip b7601e22 sp bf901d00 error 4 in libc-2.19.so[b7575000+1a7000]
[Fri Dec 30 07:58:54 2016] listend[13949]: segfault at 0 ip b7601e22 sp bf901d00 error 4 in libc-2.19.so[b7575000+1a7000]
[Fri Dec 30 07:58:54 2016] listend[13950]: segfault at 0 ip b7601e22 sp bf901d00 error 4 in libc-2.19.so[b7575000+1a7000]
[Fri Dec 30 07:58:54 2016] listend[13951]: segfault at 0 ip b7601e22 sp bf901d00 error 4 in libc-2.19.so[b7575000+1a7000]
[Fri Dec 30 07:58:54 2016] listend[13952]: segfault at 0 ip b7601e22 sp bf901d00 error 4 in libc-2.19.so[b7575000+1a7000]
[Fri Dec 30 07:58:54 2016] listend[13953]: segfault at 0 ip b7601e22 sp bf901d00 error 4 in libc-2.19.so[b7575000+1a7000]
[Fri Dec 30 07:58:54 2016] listend[13954]: segfault at 0 ip b7601e22 sp bf901d00 error 4 in libc-2.19.so[b7575000+1a7000]
[Fri Dec 30 07:58:54 2016] listend[13955]: segfault at 0 ip b7601e22 sp bf901d00 error 4 in libc-2.19.so[b7575000+1a7000]
我的問題是我怎麼能檢查libc-2.19.so該地址,看看哪些功能在錯誤發生時被調用?我試着用gdb
,但我得到:
$ gdb code/listen/i686-Linux/listend
.
.
(gdb) info addr 0xb7575000
No symbol "0xb7575000" in current context.
(gdb) info addr 0xb771c000
No symbol "0xb771c000" in current context.
在['valgrind'](http://valgrind.org)下運行你的守護進程。這個bug幾乎肯定不在libc中; valgrind會在您的code_中顯示觸發_first_無效內存訪問的點。這可能不是問題的根源,但它通常比現在更接近根本原因。 – zwol
對,我想如果我能找到libc中哪個函數指向的地址,我可以將其追溯到我的代碼中。我知道100%我的代碼有錯誤,而不是libc ;-) –
它也有助於編譯你的代碼而無需優化,並使用調試符號:'gcc -O0 -g ...'。這將改善gdb和valgrind的輸出。 –