C/C++スタックトレースの話

某氏が書いてくれた Monaスタックトレース表示機能は ebp をたどる方式。O2 とかだと -fomit-frame-pointer されてしまいうまく動かない。


スタックをある程度の深さ(浅さ?)まで全て舐めていき戻りアドレスっぽいものを全部表示したほうが良いような気がしてきた。もちろんたまたま戻りアドレスっぽいものがスタックに引数としてのっている場合もあるだろうけども。
他に良い方法ないかな。


あとはデバッグ時にはライブラリも含めて全てスタックフレームをきちんと生成するようにオプションに注意するとか。いやでもこれだと落ちたときにリビルドして確かめる必要があって面倒だなあ。

追記

スタックトレース表示機能にバグ発見。リンク先はコードなので注意。
https://github.com/higepon/mona/commit/0d8a6d82a9e687cbea25843b1385ca09f23d4a90