CoreDumpファイルを表示するにはどうすればよいですか?


13

クラッシュからバグを報告する場合、バグは非公開になり、CoreDump.gzというファイルが作成されます。Bug Triageのドキュメントには、次のことが記載されています。

クラッシュにまだCoreDump.gz添付ファイルがある場合、完全にシンボリックなスタックトレースを自動的に取得して重複をチェックすることはできませんでした。

Stacktrace.txtは人間が読めるようです。スタックトレースの意味をどのように理解できますか。CoreDump.gzを使用したCoreDumpは、人間が読めるようには見えません。「完全にシンボリックなスタックトレース」とは何ですか?「完全にシンボリックなスタックトレース」の違いは何ですか?CoreDumpファイルの内容を表示するにはどうすればよいですか?(「猫」を試しましたが、きれいではありません)

回答:


15

Coredump.gzは、クラッシュしたプログラムからアクセス可能な(圧縮された)メモリです。これはバイナリファイルです。コアダンプは宝の山であり、あらゆる種類のプライベートデータをマイニングします。

コアダンプは、「gdb」を実行して表示できます。

gdb --core=mycoredump

もちろん、このコアに関連付けられたデバッグパッケージは引き続き必要です。

その後、次の方法でスタックトレースを生成できます。

(gdb) bt

現在のスレッドのスタックトレースを生成する-パラメータ解決なし-

(gdb) thread apply all bt full

パラメータ解決を使用して、コアダンプ内のすべてのスレッドのスタックトレースを生成します。

スタックトレースと完全なスタックトレースは、プログラム内の制御フローを示します。Pythonの場合、スタックトレースの一番上に最も古い呼び出しが表示され、一番下に最新のものが表示されます。他のほとんどすべてについては、一番上が最新の呼び出しで、一番下が最も古い呼び出しです。

完全なスタックトレースは、フローだけでなく、パラメーターの値も表示します。これは通常、プライベートデータを検索する場所です。たとえば、「Password」というパラメーターと「MySecretPassword」という値を持つ「validatePassword」という関数が表示されるとします...

スタックトレースは通常、デバッグパッケージがインストールされている場合にのみ役立ちます(スタックフレームを簡単に読み取れるものに解決できるようにするため)。スタックトレースの分析には、この特定のプログラムインスタンスをビルドするために使用されたソースが必要です。


CoreDumpはバイナリファイルですが、どのように表示しますか?Stacktracesは、デバッグパッケージがインストールされている場合にのみ役立ちますが、なぜapportはそれを報告しないのですか?
-komputes

1
CoreDumpファイルは表示するためのものではなく、gdbでのデバッグに使用するためのものです。同じバージョンのソフトウェア(およびすべての依存関係)を実行しているマシンでクラッシュを生成し、デバッグパッケージを用意する必要があります。その後、上記のCarlosを使用してスタックトレースを取得できます。
stgraber

2
apportがまだapportに関連している理由については、apportにはコアダンプを取得し、DCのボックスにデバッグパッケージをインストールし、バグレポートに完全なstacktractを添付する「リトレーサー」があるためです。
stgraber

追加ドキュメント:gnu.org/software/gdb/documentation
komputes

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.