4

次の質問:
C# の優れたクラッシュ レポート ライブラリ

Linux で同じことを行う CrashRpt.dll のようなライブラリはありますか? つまり、コア ダンプと必要な環境を含む障害レポートを生成し、開発者に通知しますか?

編集:これはこの質問の複製のようです

4

7 に答える 7

3

スタック オーバーフローでの Unix システムでのスタック トレースの自動取得を参照してください。

于 2008-09-08T11:51:17.257 に答える
2

デバッグ シンボルを使用してコードをコンパイルし、シェルで unlimit coredumpsize を入力すると、バイナリと同じフォルダーにコアダンプが取得されます。gdb/ddd を使用します。最初にプログラムを開き、次にコア ダンプを開きます。追加情報については、これを確認できます。

于 2008-09-08T07:26:02.997 に答える
1

@Ionut
これはコア ダンプの生成を処理しますが、他のユーザーがクラッシュしたときに開発者に通知することは処理しません。

于 2008-09-08T07:32:32.217 に答える
0

x86注:セグメント フォールト クラッシュには、興味深いレジスタが 2 つあります。

最初のEIPは、例外が発生したコード アドレスを指定します。RichQ の回答では、addr2line を使用して、クラッシュ アドレスに対応するソース行を表示しています。ただし、EIP は無効な場合があります。null の関数ポインタを呼び出すと、 になる可能性があり0x00000000、コール スタックを破損すると、戻り値によって任意のランダムな値が EIP にポップされる可能性があります。

2 番目のCR2は、セグメンテーション違反の原因となったデータ アドレスを示します。RichQ の例では、i をヌル ポインターとして設定し、それにアクセスしています。この場合、CR2 は になります0x00000000。しかし、あなたが変更した場合:

int j = *i

に:

int j = i[2];

次に、 address にアクセスしようとしていますが0x00000008、それが CR2 に表示されます。

于 2008-09-10T14:42:38.203 に答える
0

ネイサン、あなたが間違っていると主張したわけではありません。Linux での (限られた) 経験では、セグメント ベースは常にゼロであると言っていました。多分それは私が尋ねる良い質問です...

于 2008-09-12T00:57:18.327 に答える
0

@マーティン

私は x86 のアーキテクチャの検証を行っているため、プロセッサが提供するアーキテクチャには精通していますが、その使用方法にはあまり詳しくありません。それが私のコメントの根拠です。CR2が正しい答えを与えると期待できるなら、私は訂正されたままです.

于 2008-09-11T18:07:23.053 に答える
0

ネイサン、セグメントベースがゼロでないのはどのような状況ですか? Linux アプリケーション開発に携わった 5 年間で、このようなことは一度もありませんでした。

ありがとう。

于 2008-09-11T17:33:30.453 に答える