有人能告诉我一个关于如何在Windbg中使用这两个命令的示例吗?我在debugger.chm中阅读了该文档,但很困惑。我在Google和MSDN上搜索过,但找不到易于学习的样本。
答案 0 :(得分:1)
根据以下伪代码考虑功能级别:
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
”相反,因为它停止了当你想要向下一个堆栈级别时。
答案 1 :(得分:0)
Windbg输出有问题 - “无法继续完成步骤”。以下是Windbg的相关输出和源代码,任何想法?
(我在main中设置断点,然后使用p命令两次然后使用gc命令 - 然后发生错误。)
(204.18c0):中断指令异常 - 代码80000003(第一次机会)
NTDLL DbgBreakPoint!
00000000 77ef2aa0 cc int 3
0:000> bp main
0:000> g
Breakpoint 0 hit
TestDebug1!main:
00000001
40001090 4057推rdi
0:000> p
TestDebug1主+ 0X1A!
00000001 400010aa c7442424c8000000 mov dword ptr [rsp+24h],0C8h ss:00000000
0012feb4 = CCCCCCCC
0:000> p
TestDebug1主+ 0×22!
00000001`400010b2 488d442424 lea rax,[rsp + 24h]
0:000> GC
无法继续完成步骤
使用namespace std;
int foo() { int b = 300;
return b;
}
int goo() { int a = 400;
return a;
}
int main() { int a = 200;
int* b = &a;
foo();
a = 400;
goo();
return 0;
}