Windbg的gu和pc命令
谁能给我示范一下如何在Windbg中使用这两个命令的示例?我在debugger.chm中阅读了文档,但感到困惑。我曾在Google和MSDN中进行过搜索,但没有找到易于学习的示例。
解决方案
根据以下伪代码在功能级别上进行思考:
1 x = 0 2 y = 0 3 call 8 4 x = 5 5 y = 7 6 call 8 7 halt 8 print x 9 print y 10 call 12 11 return 12 print x + y 13 print x * y 14 return
这些命令基本上是"运行到事件发生"。该事件导致调试器中断(停止执行并等待命令)。
"gu
"命令一直运行,直到上升到下一个最高堆栈级别为止。如果我们在第8、9、10或者11行,则最终会在4或者7行,具体取决于哪个"call 8
"调用了该代码。如果我们位于第12、13或者14行,我们将在11点休息。
将此视为一直运行,直到我们将其移到堆栈上为止。请注意,如果我们第一次走下坡路,则必须走两次。
"pc
"命令一直运行到下一个调用,因此,如果我们在第1行,它将在第3行中断。这与"gu
"相反,因为在我们尝试进入时它会停止降低堆栈级别。
Windbg输出出现问题-"无法继续完成步骤"。这是Windbg和源代码的相关输出,有什么想法吗?
(我在main中设置了一个断点,然后使用p命令两次执行下一步,然后使用gc命令-然后发生错误。)
(204.18c0):中断指令异常代码80000003(第一次机会)
ntdll!DbgBreakPoint:
0000000077ef2aa0 cc int 3 0:000> bp主 0:000>克 断点0命中 TestDebug1!main: 00000001
40001090 4057 push rdi
0:000> p
TestDebug1!main + 0x1a:
00000001400010aa c7442424c8000000 mov dword ptr [rsp + 24h],0C8h ss:00000000
0012feb4 = cccccccc
0:000> p
TestDebug1!main + 0x22:
00000001`400010b2 488d442424 lea rax,[rsp + 24h]
0:000> gc
无法继续完成的步骤
使用命名空间std;
int foo()
{
整数b = 300;
return b;
}
int goo()
{
整数a = 400;
return a;
}
int main()
{
整数a = 200;
int* b = &a; foo(); a = 400; goo(); return 0;
}