2011-02-11 11 views
3

カスタマーの場所でサードパーティのソフトウェアがクラッシュしました。プロセスとライブラリは削除され(シンボルはありません)、呼び出しスタックは有用な情報を提供しません。私が持っているものはすべて壊れていないレジスタです。このサードパーティのコードはC言語で書かれています。レジスタとロースタックを使用して、シンボルなしでgdbコアを分析およびデバッグする方法

今、gdbを使って簡単な問題をデバッグしています。しかし、これは少し複雑です。私はレジスタと生スタックの情報がクラッシュが発生した場所をコアレットするために使用されるかもしれないと思うので、この面で助けが必要です。

お客様のサイトでストリップされていないバイナリを展開することや、社内クラッシュの再生を行うことはできません。また、私はこの第三者コードに慣れていません。

また、次の点については、ポインタ/サイト/ドキュメントが必要です。
1)ELFおよびさまざまなセクションヘッダー。
2)ライブラリとプロセスのシンボルファイルを(コンパイル時に)作成する方法。
3)シンボルファイルからシンボルを読み取るようにgdbに指示する方法。

答えて

0

私たちができるべきことの一つは、あなたのプロセスのストリップされていない/シンボル付きバージョンに対してコアファイルを開くことです。コンパイルプロセス(コンパイラ、最適化フラグなど)が同じで、これらすべてのデバッグ情報を保持している限り、GDBはコアから期待できるすべての情報を提供できるはずです。

gdb [options] executable-file core-file 

デバッグ情報(行のシンボルと小人、タイプ、...)を使用して、プロセスをコンパイルするには、お使いのコンパイラフラグで-gを追加する必要があります。カスタムライブラリにも同じことが適用されます。

システムライブラリについては、いつも(いつもとは限りません)いつもconviantかもしれませんが、現代のLinuxディストリビューション(少なくともFedora)はgdbに直接提供しています。

関連する問題