私のアプリのスレッドのいくつかは最適化された関数にあり、アプリをデバッグすると、gdbはそれらの関数からバックトレースできません。しかし、私はアセンブラーを見てきましたが、次のようなことを行うことで、前の関数のフレームまで手作業でスタックを部分的に巻き戻すことができます。
set $old_ra = $ra
set $old_sp = $sp
set $ra = *(unsigned long*)($sp+28)
set $sp = $sp + 48
bt
set $ra = $old_ra
set $sp = $old_sp
これは、ライブデバッグを行っている場合は完全に機能し、完全なバックトレースを正常に表示します。コアダンプを見るときに、同じことをオフラインで実行できるようにしたいと思います。明らかに、レジスタを突くという概念はコアダンプでは無意味ですが、同様のバックトレースを実行できるように、gdbに「レジスタにこの値を使用する」ように指示する方法はありますか?