私はC++ソフトウェア(サーバ)を持っていて、クラッシュしています。正確には分かりません 問題はログに基づいています。私は の後にLinuxの何かを作って、このプロセスをダンプして、この のファイルをgdb
にインポートし、何をしていないのかを分析します。gdbインポートのクラッシュ/終了時間のプロセスダンプ?
誰でも過去に何かしましたか? 誰かが情報のアイデアなどを手伝ってくれますか?
ありがとうございます!
私はC++ソフトウェア(サーバ)を持っていて、クラッシュしています。正確には分かりません 問題はログに基づいています。私は の後にLinuxの何かを作って、このプロセスをダンプして、この のファイルをgdb
にインポートし、何をしていないのかを分析します。gdbインポートのクラッシュ/終了時間のプロセスダンプ?
誰でも過去に何かしましたか? 誰かが情報のアイデアなどを手伝ってくれますか?
ありがとうございます!
あなたが望むのは、GDBでクラッシュ場所を見つけるために働く通常のコアダンプです。 詳細については、http://linux.die.net/man/5/coreを参照してください。
デーモンに現在のディレクトリの書き込み権限がない場合、コアは生成されません。リダイレクトするには、試してみてください。
mkdir /tmp/corefiles
chmod 777 /tmp/corefiles
echo "/tmp/corefiles/core" > /proc/sys/kernel/core_pattern
コアファイルをお探しですか?あなたのデーモンを起動するスクリプトでは、このコマンドを追加します(スクリプトのインタプリタを想定したがbash
です):
ulimit -c unlimited
。
他の人から回答があったので、コアダンプファイルを取得できます。環境を適切に構成してください。
別の方法として、デーモンが既に実行されていてクラッシュする前に、デバッガを使用してattachを実行することです。
そして、あなたは `-g -Wallでそれらをコンパイルし、あなたのデーモンのソースコードを持っている場合もgdb --args
/パス/に/デーモンデーモン-引数 ...
ありがとうございますが、私には当てはまりませんが、クラッシュ後のプロセスはバインドされたポートを解放せず、新しいデーモンは他の場所に開始されず、このアプリケーションは常に生き続ける必要があるため、 – Svisstack
であなたのデーモンを起動することができます'gcc'コンパイラのフラグが役に立ちます。 –
@Basile Starynkevitch:BothsフラグはMakefileにあります – Svisstack
コアを取得し、 'gdb/path/to/daemon core 'でデバッグしてください –