Windbg的gu和pc命令

时间:2008-09-28 11:34:52

标签: debugging

有人能告诉我一个关于如何在Windbg中使用这两个命令的示例吗?我在debugger.chm中阅读了该文档,但很困惑。我在Google和MSDN上搜索过,但找不到易于学习的样本。

2 个答案:

答案 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;

}