1

1)デーモンに問題があります。コアダムの生成なしで時々クラッシュしました。システムはFreeBSDです。以前は常に.core生成されていました。これは他の種類のエラーまたは他の何かが発生し、コアなしで終了したようです。とにかく私はこれを知り、修正したいです!

2)コアが100%確実に生成されなければならないというfreebsdをチェックする方法は?ここ:プロセスがセグメンテーション違反を起こしたときにLinuxでコアダンプを生成するにはどうすればよいですか? それを言うulimit -c unlimitedCommand not found

3)GDBを使用してプロセスにアタッチする必要があるエラー/クラッシュをキャッチしているようですか?どうやってするか?また、stackoverflowで検索し、設立しました: gdbは停止せずにプロセスに接続しますが、私は大丈夫だと確信しています:

a)次のattach行を実行して追加する権限を彼に与えるというファイルを作成します。

 echo "cont" > attach.gdb
 gdb server $1 -x attach.gdb
 rm attach.gdb

b)のよう./attach に実行し、開始しましたが、何もできません。それはそうです?デーモンがクラッシュするまで待つ必要があり、generate-core-fileコアを取得するために書き込むよりも?

4)generate-core-fileSEGFAILまたはその他の例外なしにデーモンが終了した場合、コアはコマンドによって生成されますか?

私の英語に感謝し、申し訳ありません。母国語以外で大きなメッセージを書くのは難しい。あなたは理解する必要があります...

4

2 に答える 2

1

3b)./attach 12341234が実行中のプロセスのPIDである場合に実行する必要があります(そのPIDは、$1gdbに渡されるスクリプトへの引数になります)

または、そのアタッチスクリプトを気にせずに(かなり無意味です)、実行してからgdb server 1234コマンドを入力contし、クラッシュするのを待ちます。

gdbが接続されているときにクラッシュする場合、なぜコアファイルが必要なのですか?コアファイルの利点は、デバッガーを使用してそれを調べることですが、デバッガー内でクラッシュした場合は、直接デバッグするだけで、コアファイルは必要ありません。したがって、generate-core-fileを忘れて、クラッシュしたときにプロセスを直接調べてください。

于 2012-05-17T15:50:45.627 に答える
1

ulimitの問題が原因でプロセスがコアにならない場合は、プロセスを実行する前に、ulimitを設定する小さなシェルスクリプトを記述してください。

#! /bin/sh
ulimit -c unlimited
/path/to/my/program > program.out 2>&1
echo $? >> program.out

これにより、プログラムからstdoutとstderrをキャプチャし、プログラムの戻りステータスをprogram.outにキャプチャできます。このファイルのサイズを監視する必要があります。ファイルシステムがいっぱいになると、他の問題が発生する可能性があります。

ただし、これがコアを取得できなかった理由であるとは限りません。プログラムがデバッグ用にコンパイルされ、assert()を押すと、コアリングなしで終了します。プログラムは終了する前に何かを印刷したり、ログに記録したりしますか?

于 2012-05-23T04:40:23.267 に答える