2012-01-09 9 views
0

私はC++ソフトウェア(サーバ)を持っていて、クラッシュしています。正確には分かりません 問題はログに基づいています。私は の後にLinuxの何かを作って、このプロセスをダンプして、この のファイルをgdbにインポートし、何をしていないのかを分析します。gdbインポートのクラッシュ/終了時間のプロセスダンプ?

誰でも過去に何かしましたか? 誰かが情報のアイデアなどを手伝ってくれますか?

ありがとうございます!

答えて

5

あなたが望むのは、GDBでクラッシュ場所を見つけるために働く通常のコアダンプです。 詳細については、http://linux.die.net/man/5/coreを参照してください。

デーモンに現在のディレクトリの書き込み権限がない場合、コアは生成されません。リダイレクトするには、試してみてください。

mkdir /tmp/corefiles 
chmod 777 /tmp/corefiles 
echo "/tmp/corefiles/core" > /proc/sys/kernel/core_pattern 
+0

であなたのデーモンを起動することができます'gcc'コンパイラのフラグが役に立ちます。 –

+0

@Basile Starynkevitch:BothsフラグはMakefileにあります – Svisstack

+0

コアを取得し、 'gdb/path/to/daemon core 'でデバッグしてください –

1

コアファイルをお探しですか?あなたのデーモンを起動するスクリプトでは、このコマンドを追加します(スクリプトのインタプリタを想定したがbashです):

(それは通常、デフォルトでは0です)「無制限」にコアファイルの最大サイズを設定
ulimit -c unlimited 

+0

これは技術的にはデーモンではなく、これは画面のコンソールアプリケーションですが、これは違いがありますか?私はこれを無制限に設定しましたが、コアファイルはありません。 – Svisstack

+0

コンソールから実行している場合は、gdbで起動してください。 – eduffy

+0

できません、このアプリケーションは常に生き続ける必要があります。bashで実行中です。クラッシュしたときにgdbをアタッチすると、gdbはgdbを終了するまでプロセスを終了させません。 – Svisstack

1

他の人から回答があったので、コアダンプファイルを取得できます。環境を適切に構成してください。

別の方法として、デーモンが既に実行されていてクラッシュする前に、デバッガを使用してattachを実行することです。

そして、あなたは `-g -Wallでそれらをコンパイルし、あなたのデーモンのソースコードを持っている場合もgdb --args/パス/に/デーモンデーモン-引数 ...

+0

ありがとうございますが、私には当てはまりませんが、クラッシュ後のプロセスはバインドされたポートを解放せず、新しいデーモンは他の場所に開始されず、このアプリケーションは常に生き続ける必要があるため、 – Svisstack

関連する問題