0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

core ファイルの解析方法メモ

Last updated at Posted at 2024-07-02

概要

拙者「コアダンプ=絶望」という悲しみから脱却したい侍

ポイント

コアファイル解析のコマンドはこう:

$ gdb <実行ファイル> <コアファイル>

arm アーキテクチャ向け実行ファイルの解析時はこう:

$ gdb-multiarch <実行ファイル> <コアファイル>

注意

解析する実行バイナリにデバッグ情報が残ってる必要アリ。

ビルドする時は -g オプション、-O0 オプションを忘れずに付けよう、ヨシ!

詳細

コアダンプ?

コアダンプとは、プログラムが強制終了した時にコアファイルを吐き出すこと。

プログラムが強制終了した時のメモリ空間を保存したファイルがコアファイルで、これを解析することで、どこで止まったのか、なぜ止まったのかがふんわりわかる。

解析には gdb というツールを使う。

解析時には、実行バイナリのリンケージを解決できる配置にしておく必要があるっぽい。具体的には、実行時にリンクする動的ライブラリ(.so のやつ)とかが、実行環境と同じ位置関係に存在する必要があるっぽい。知らんけど。

gdb での解析を実行すると、↓のようになる。

(gdb) コンソールで bt と入力すると、バックトレースが表示され、セグメンテーションフォルト時に何が動いていたかを表示してくれる。

この例では、

  • hoge 関数(fuga.c の 3353 行目)内の pthread_sigqueue() 関数でセグメンテーションフォルトが発生し、シグナル SIGSEGV が配送されていること
  • pthread_sigqueue() 関数の第一引数が 0 となっており、スレッド識別子が不正であること

が分かる。

InkedInkedcore解析1_LI.jpg

Inkedcore解析2_LI.jpg

注意

  • デバッグ情報が必要
    ビルド時には -g, -O0 をつけるべし。

  • Git ディレクトリにコアファイルを置いちゃダメ!
    コアファイルはサイズがでっかい。うっかり Git に登録しちゃうと、「なんかデカいファイルがあってプッシュできない」現象が発生する。ダメ、ゼッタイ。(まあそんなポカをするのは俺くらいだろうけど。。。)

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?