eyecatch thumbnail

gdb バックトレース / スタックトレース の見方

Profile picture
Takeru Yamada
2021.02.08

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 のバックトレース/スタックトレースの読み方についてのメモでした.

最後までお読みいただきありがとうございました.


執筆機材


関連記事