1

リスニングサーバーに接続するTCPクライアントを作成しました。TCPキープアライブも実装しました。クライアントがクラッシュしてコアダンプされることがあります。以下はコアダンプのトレースです。

問題は、LinuxカーネルバージョンUpdate 4、カーネル2.6.9-42.0.10にあります。

2つのコアダンプがありました。

(gdb) where
#0 0x005e77a2 in _dl_sysinfo_int80 () from /ddisk/d303/dumps/mhx239131/ld-
linux.so.2
#1 0x006c8bd1 in connect () from /ddisk/d303/dumps/mhx239131/libc.so.6
#2 0x08057863 in connect_to_host ()
#3 0x08052f38 in open_ldap_connection ()
#4 0x0805690a in new_connection ()
#5 0x08052cc9 in ldap_open ()
#6 0x080522cf in checkHosts ()
#7 0x08049b36 in pollLDEs ()
#8 0x0804d1cd in doOnChange ()
#9 0x0804a642 in main ()

(gdb) where
#0 0x005e77a2 in _dl_sysinfo_int80 () from /ddisk/d303/dumps/mhx239131/ld-
linux.so.2
#1 0x0068ab60 in __nanosleep_nocancel ( 
from /ddisk/d303/dumps/mhx239131/libc.so.6
#2 0x080520a2 in Sleep ()
#3 0x08049ac1 in pollLDEs ()
#4 0x0804d1cd in doOnChange ()
#5 0x0804a642 in main ()

私たちは自分たちの環境で問題を再現しようとしましたが、できませんでした。

コアファイルの原因は何ですか?

そのような状況を避けるために私を助けてください。

ありがとう、ナガ

4

2 に答える 2

1

_dl_sysinfo_int80カーネルへのシステムコールを行う単なる関数です。connectそのため、システム コール (おそらく最初の例と2 番目の例で使用されているもの) でコア ダンプが発生していnanosleepます。おそらく、無効なポインターを渡しているためです。

無効なポインターは、これらの関数を呼び出すコードが壊れているか、プログラムの他の場所が壊れており、プログラムのメモリが破損している可能性があります。

#2両方の例のコア ダンプで上の 2 つのフレーム (frame ) を見て、渡されるパラメーターを確認します。残念ながら、デバッグ情報を使用してコンパイルしていないようで、それらを見るのが難しくなっています。

valgrindさらに、何かが見つかるかどうか試してみることをお勧めします。

于 2008-12-03T16:26:45.927 に答える
0

あなたのプログラムは、上記のいずれの場所でもほぼ確実にコアダンプしませんでした。

ほとんどの場合、プロセスに複数のスレッドがある(および他のスレッドがコアダンプを引き起こした)か、外部の何かがプロセスを停止させた(など'kill -SIGABRT <pid>')。

複数のスレッドがある場合は、GDBがさらに手がかりを提供する可能性が'info threads'あります。'thread apply all where'

于 2008-12-06T07:22:16.443 に答える