Coreファイルのこと、すっかり忘れていた

普段というか滅多にcoreファイルで不具合解析することはない。理由は:

  • 手間がかかる
  • 起きている現象はわかっても、原因まではわからないことが稀によくある
  • gdbで原因特定まで調査するの難しい

ぐらいかなぁ。

だいたい、再現する不具合は発生した時点で問題の50%ぐらいは解決したようなもので、あとはログを埋め込んで追っていけばだいたい解決できる。

で、久しぶりにCoreファイルを使って解析しようと思い立ったとき、どこにもCoreファイルが見当たらない。普段使わないから、存在自体すっかり忘れていた。出力先が制限されている設定だと思っていた。

AI先生に聞くと、coreファイルの出力先は以下でわかるらしい。

cat /proc/sys/kernel/core_pattern

これを実行すると、出力先が systemd-coredump に処理されていることがわかった。正直、systemdがそんなことまでやっているのかと驚いた(オールドタイプの人間なので)。

/var/lib/systemd/coredump を覗いてみると、確かにCoreファイルらしきものがいくつかある。

使い方がわからず引き続きAI先生に聞くと、

coredumpctl list

これでコアダンプ一覧が表示されて、以下でコアダンプが読み込まれるそうだ。

coredumpctl dubug PID

であとは、bt, list, frame 番号とかで確認したけど、現象は確認できても、結局原因まではわからずじまい。

別の調査で原因がわかったので良かったのですが、やっぱりデバッガーを使った解析は難しいと実感した。

ちなみに、直接関係はありませんが、「gdbは頼りにならない」という下記の内容に思わずクスッときました。自分がRustを業務で使うことはないだろうが、C++に置き換えて考えると、似たような意見になる。

https://qiita.com/legokichi/items/4e85ec1e74f4e754fb94