有没有办法在崩溃转储中查看每个堆栈帧中的寄存器内容? 发生异常时,寄存器窗口似乎包含寄存器,但是能够在每个堆栈帧中查看它们的内容会很有用。
答案 0 :(得分:2)
根据调用约定,您可以获得一些保存在堆栈中的寄存器。例如,在cdecl calling convention中,除了EAX,ECX和EDX之外的所有寄存器都需要由调用者或被调用者保存。这三个寄存器是可以破解的,因此您通常无法从调用堆栈中的较高位置获取它们的值。如果函数不使用必须保存的寄存器,则它不会保存它,但由于它不使用它,该寄存器在下一个更高的堆栈帧中具有相同的值。
答案 1 :(得分:1)
在做了一些研究并稍微考虑一下之后,我意识到这可能是不可能的。崩溃minidump保存进程内存的某些区域(取决于传递给MiniDumpWriteDump()函数的标志)和足够的状态信息,以重新创建调试器中发生崩溃的环境。它在每条指令或每个堆栈帧上都没有处理器状态,它只知道异常发生时的处理器状态。
答案 2 :(得分:0)
在优化版本中,堆栈中的某些信息可能会被抛出,但是,您可以要求调试器尝试向您显示给定堆栈帧的信息。首先执行“kn
”以查看包含帧编号的堆栈,然后尝试“.frame /c [frame]
”或“.frame /r [frame]
”。
查看帮助(“.hh
”)以获取更多信息。
答案 3 :(得分:-1)
我不认为你可以在调试时得到它。您可以从寄存器获得的唯一值是它们在当前指令中的值。