2011-07-06 24 views
5

私は、プロジェクト用のカスタムコアダンプ処理アプリケーションを作成しました。私は '/ proc/sys/kernel/core_pattern'を変更して、ダンプハンドラとそれが呼び出されるようにしました。コアダンプファイル形式

ここで問題は、コアダンプをgdbが認識できるファイルに保存することです。現在、私のダンプ・ハンドラはSTDINからダンプを読み込み、 'core.dump'ファイルに保存します。私は、このコアは、GDBにダンプをロードしようとすると、それは私にエラーを与える:

(gdb) ... is not a core dump: File format not recognized

私は、次の標準コア上の「file」コマンド実行し、それが私に与えてダンプ:

core: ELF 64-bit LSB core file x86-64, version 1 (SYSV), SVR4-style, from './dump_gen'

カスタム生成されたダンプ、 'ファイル' の次与える:

core.dump: data

コアダンプを正しく書いてgdbで使えるように助けてください。

PS:標準のコアダンプファイルを使用しません。

答えて

4

でELFの仕様を見つけることができます。

単純なスクリプトを作成し、実行可能にして、コアパターンをスクリプトに設定します。

#!/bin/sh 
cat > /tmp/core.$$ 

今すぐコアファイルを生成する(例えばsleep 1243を実行し、ctrl+\を押して)、それが動作するはずです。

自分のシステムで自分でテストしましたが、問題なく動作します。

+0

迅速な対応をありがとうございます。私はあなたの方法をチェックし、それが働いたので、私は自分のCコードを見て、バッファにデータをコピーする際のバグを見つけました。出来た。 – AvadhP

+1

私も同じ問題に直面していますが、上記の手順は何をするのでしょうか? gdbの引数として渡すことができる新しいコアダンプを生成しますか?ありがとう! – sad

4

最初に気になる点は、ファイルの種類を示すElfヘッダーフラグです。共有オブジェクト、リンクされていないオブジェクト、実行可能およびコアダンプの4つの値があります。これがgdbエラーの原因となる可能性が最も高いです。

また、objdumpを使って調べてみてください。ELFファイル全体を解析して、どの部分が明らかにうまくいかないかを分析することができます。

あなたは私はあなたが何らかの形でコアファイルにすべてのデータを書き込まないと思うhttp://refspecs.freestandards.org/elf/elf.pdf