WinDbg - 禁用源模式

WinDbg - Disable source mode

我试图完全阻止 WinDbg 显示源代码。 我试图通过取消选中 Debug->Source Mode 选项来禁用,但在我逐步执行程序集时源代码仍然出现。

如何完全禁用源代码调试?

我尝试了以下方法但没有成功:

  1. 取消选中 Debug->Source Mode 选项
  2. .lines -d命令。
  3. l-t命令。
  4. 步进 pt 而不是 F10F11

这不是禁止打开源文件的答案window 但是减少它引起的烦恼的技巧

如果 src window 在每一步都困扰着你
取消停靠它并缩小它的大小并将它放在一个你不会被它打扰的地方

多文件项目中的其他源文件将在您放置第一个未停靠的源文件的同一位置自动打开

你可以使用 alt + w + w 激活任何 src 文件,如果你想看到源最大化和最小化 window

在下面的屏幕截图中,4 个 src 文件已打开,但通过多次打开和停靠并在每个打开的源文件上执行命令 window 调整大小,不会让您烦恼

您可以使用.srcpath 命令将源路径更改为空目录。 Windbg 将没有任何源代码可显示。

.srcpath [emptyDirectoryPath]

您的 PDB 包含每行汇编的源代码的完全限定路径。如果你对你的函数执行 "u" 命令,你可以看到这个:

kd> u xxx!xxxVolumeEvtIoWrite
xxx!xxxVolumeEvtIoWrite [e:\repos\clients\xxx\xxx\src\xxx_volume.cpp @ 1110]:
88c05c60 push    ebp
88c05c61 mov     ebp,esp
88c05c63 sub     esp,38h

如果您的指令指针位于这些地址之一,WinDbg 将弹出此源代码 window。没有选项可以阻止它,所以之前隐藏 window 的答案是一个合理的解决方案。

您唯一的其他选择是阻止 WinDbg 找到您的源代码。您可以通过以下两种方式之一执行此操作:

  1. 从 PDB 中剥离源代码行信息,这样 WinDbg 就不再知道源代码的路径了。您可以使用 /PDBSTRIPPED linker switch or with the BinPlace 实用程序

  2. 将您的源代码移动到备用路径,以便 WinDbg 无法再找到它

我建议编写一个关闭源文件的 AutoIt 脚本,而不是修改 PDB 或类似的东西。

While(True)
    CloseWinDbgSource()
WEnd

Func CloseWinDbgSource()
    WinWait("[CLASS:WinBaseClass]", ".cpp", 10)
    WinClose("[CLASS:WinBaseClass]", ".cpp")
EndFunc

或者您可以修补方法 windbgx86!WinBase::Create():

0:000> .dbgdbg

然后在国开

0:000> bp windbgx86!WinBase::Create
0:000> g
[Force opening of a window here]
0:000> bc 0
0:000> a eip
ret
<Enter>
0:000> g

这种方法的好处是您也不需要为任何其他 windows 操心,因为不会再打开任何 windows。