有时一个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的输出。 –