Contents
まとめ
- 原則: フレーム番号 (#??) が大きい方が先に呼ばれた関数である
はじめに
どうも,たける@typememo です.
gdb
のバックトレース / スタックトレースの読み方を理解したのでメモしておきます.
参考書籍:
バックトレース / スタックトレースの読み方
バックトレース / スタックトレースの読み方の原則は,
“フレーム番号が大きい方が先に呼ばれた関数である”
です.
例えば,以下のようなバックトレースが取れた場合.
#0 0x?? in test.c
#1 0x?? in util.c
#2 0x?? in base.c
#3 0x?? in main.c
この例でいうと, main.c (#3) => base.c (#2) => util.c (#1) => test.c (#0) の順番でコールされたことを意味しています.
gdb の読み方がわからない時の自分は,昇順で呼ばれるんだろうと思っていました.
こんな感じのイメージでした.
#0 => #1 => #2 => #3
でも実際のコールされた順番は降順だったので,知った時は結構驚きでした.笑
良い勉強になりました.
おわりに
いかがだったでしょうか?
gdb のバックトレース/スタックトレースの読み方についてのメモでした.
最後までお読みいただきありがとうございました.
執筆機材
- Xiser Pro Trainer (ステッパー)
- HHKB Professional 墨 (キーボード)
- HHKB キートップセット 白 (キートップ)
- Apple Magic Mouse 2 (マウス)
- Apple MacMini (PC)
- iiyama Display 27inch FullHD (ディスプレイ)
- KINTO UNITEA 550ml (コップ)