我的应用程序中的一些线程位于优化的函数中,当我调试应用程序时,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“只使用这个值作为寄存器”,这样我就可以做类似的回溯?