Linux(MIPS):查看核心转储时暂时“更改”寄存器内容

时间:2011-09-30 13:28:40

标签: linux mips coredump backtrace

我的应用程序中的一些线程处于优化的功能中,当我调试应用程序时,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“只需将这个值用于寄存器”,这样我就可以进行类似的回溯?

1 个答案:

答案 0 :(得分:2)

没有开箱即用。我找到的唯一方法是物理修改核心文件。 ELF核心文件通常有一个或多个'reg'部分,其中包含进程'寄存器。您只需要确定该部分的确切位置是您要更改的寄存器,然后编辑该文件,将新值放在那里并重新运行GDB。