RaspberryPi[67] Cプログラムで segmentation fault が出たときの後追いデバッグ手順まとめ
「後追いできる」ビルド
segmentation fault が出ても、情報が無ければ原因は追えない。
最初にやるべきことは「デバッグ情報付きでビルドする」こと。
最低限おすすめの gcc オプション
gcc xing_alart_lte.c \
-g -O1 \
-Wall -Wextra -Wformat \
-o xing_alart_lte
各オプションの意味
-g
gdb で行番号・変数名を見るために必須
-O1
最適化しすぎない(-O0でもOK)
-Wall -Wextra -Wformat
未初期化変数や printf 系の事故を警告で炙り出す
※ warning が出ても error が無ければ実行ファイルは生成される
core dump を使った後追いデバッグ
core dump とは
プロセスがクラッシュした瞬間の
・メモリ
・スタック
・レジスタ
を丸ごと保存したファイル。
再現しなくても、後から原因を追えるのが最大の利点。
core が出ない理由(よくある落とし穴)
segfault が出たのに core が無い場合、ほぼこれ。
ulimit -c
# → 0
ulimit -c 0 は
「core dump を出すな」という設定。
今のシェルだけ有効にする
ulimit -c unlimited
確認:
ulimit -c
# unlimited
⚠ 注意ulimit は そのシェル限定。
- 新しいターミナル
- ssh 再接続
- systemd サービス
では また 0 に戻る。

