Debugging 调试本地进程时WinDbg变慢(跳过)

Debugging 调试本地进程时WinDbg变慢(跳过),debugging,windbg,Debugging,Windbg,这真的快把我逼疯了。我使用WinDbg作为我的主要调试器。 用于调试本地服务(本地运行的WinDbg,在同一台机器上调试服务)。 PDB文件存储在本地硬盘上。 源代码通过SMB共享访问 调试以突发的方式工作,有时流程良好,大多数时候我都会看到令人难以置信的恼人的“*BUSY*”消息,几乎每次我执行“跳过”时都会出现这种情况 你知道我能做些什么来加快速度吗 谢谢当打开多个工具窗口(本地、手表、调用堆栈)时,我通常会遇到这种情况。如果这些窗口被打开,WinDbg将使用慢速符号查找每个“跨步”命令来更

这真的快把我逼疯了。我使用WinDbg作为我的主要调试器。 用于调试本地服务(本地运行的WinDbg,在同一台机器上调试服务)。 PDB文件存储在本地硬盘上。 源代码通过SMB共享访问

调试以突发的方式工作,有时流程良好,大多数时候我都会看到令人难以置信的恼人的“*BUSY*”消息,几乎每次我执行“跳过”时都会出现这种情况

你知道我能做些什么来加快速度吗


谢谢

当打开多个工具窗口(本地、手表、调用堆栈)时,我通常会遇到这种情况。如果这些窗口被打开,WinDbg将使用慢速符号查找每个“跨步”命令来更新所有窗口


在这方面,只使用命令行(NTSD)调试器要快得多。

< P>如果它正在慢慢地从Internet上拉Windows符号文件,考虑将它们全部下载到您的硬盘上,并指向WINBG到它们的位置。最好将服务的符号文件和源文件也放在本地驱动器上。

如果工作区中保存了许多跟踪模块加载事件(通过bu创建)的非限定断点,则可能会发生这种情况。

此外,还值得检查网络连接和本地符号缓存大小。可以尝试以下几种方法:

  • 使用该命令可显示windbg正在引用的图像和PDB的更多详细信息。您可能会看到它访问网络的次数超出预期,或者网络服务器不可用,请求超时
  • 确保您的符号路径具有
  • 在本地复制源并添加到源路径

在下一个命令上设置断点,甚至在硬件断点(使用ba)上设置断点,而不是使用“跨步执行”

我遇到了完全相同的问题,并且能够通过调整符号选项看到很大的改进。具体来说,SYMOPT_NO_PUBLICS选项似乎是最重要的,但我调整了其他一些相关选项。我做了以下的

.symopt-0x4 .symopt+0x100 .symopt+0x8000 .symopt-0x10000

…即:

-SYMOPT_延迟加载 +SYMOPT\u无不合格负载 +SYMOPT_NO_PUBLICS -SYMOPT_自动_公共

在所有这些之后,我有一个symopt位掩码值0x80028333,我现在将其用作WinDbg命令行选项,如中所示:

windbg.exe-sflags 0x80028333

我还没有发现这种方法是否有任何缺点。也许在某些情况下,使用SYMOPT_NO_PUBLICS会导致信息丢失,但到目前为止,它对我来说一直运行良好,而且肯定要快得多


当符号路径包含大型文件存储时,WinDbg可能需要很长时间来搜索不存在的符号。您可以按照用户的建议,通过运行Process Monitor并观察WinDbg执行的文件操作来诊断此行为


这对我们的组织来说是一个极大的痛点,但我在这个问题中找到了一个详细的解决方法:“

我不知道,但我会使用Process Monitor查看WinDbg冻结时是否正在忙于执行一些IO工作。如果是的话,这可能是问题根源的一个很好的暗示。此外,如果您正在从Microsoft服务器获取PBD,请尝试禁用它。如果出于某种原因WinDbg无法在本地保存PBD,则它可能每次都会访问服务器。检查是否有过多的BPs同时处于活动状态;另外,为符号启用“嘈杂”模式,以检查您是否仅引用本地符号您是否设置了符号路径环境变量?如果是这样,WinDbg将使用它。从微软获得PDB可能会大大降低速度。