で書かれた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)で実行してください。バグはほとんど確かにlibcにはありません。 valgrindは_first_無効なメモリアクセスを引き起こした_あなたのコード_の中のポイントを明らかにするでしょう。これはバグの根本的な原因ではないかもしれませんが、現在のところ根本原因にはるかに近いものです。 – zwol
私はlibcのどの機能が、私のコードに戻ってくるのかを指摘していることがわかりました。私は100%私のコードがlibcではなく、バグを持っていることを知っています;-) –
また、最適化やデバッグシンボルを使わずにコードをコンパイルするのに役立ちます: 'gcc -O0 -g ...'。これにより、gdbとvalgrindの両方の出力が向上します。 –