Visual studio 阻止Visual Studio尝试加载特定DLL的符号

Visual studio 阻止Visual Studio尝试加载特定DLL的符号,visual-studio,debugging,debug-symbols,Visual Studio,Debugging,Debug Symbols,我已将VisualStudio2005设置为使用Microsoft的符号服务器。我还安装了,它将一个钩子DLL注入到每个进程中。每当我开始调试应用程序时,Visual Studio都会说: "Loading symbols for C:\Program Files\UltraMon\RTSUltraMonHookX32.dll..." 从眨眼到几十秒的时间。它永远也找不到那些符号。。。我能告诉它不要费心看吗 (我尝试创建一个空的RTSUltraMonHookX32.pdb文件,但Visual

我已将VisualStudio2005设置为使用Microsoft的符号服务器。我还安装了,它将一个钩子DLL注入到每个进程中。每当我开始调试应用程序时,Visual Studio都会说:

"Loading symbols for C:\Program Files\UltraMon\RTSUltraMonHookX32.dll..."
从眨眼到几十秒的时间。它永远也找不到那些符号。。。我能告诉它不要费心看吗


(我尝试创建一个空的
RTSUltraMonHookX32.pdb
文件,但Visual Studio发现它不好,继续查找。)

您不能以非常细粒度的方式执行此操作,但可以禁用自动符号加载,然后通过模块窗口(调试->窗口->模块)手动选择要加载的符号

禁用自动符号加载的步骤

  • 工具->选项->调试->符号
  • 选中“仅在手动加载符号时搜索上述位置”

还要检查您是否没有“\n t\u SYMBOL\u PATH”环境变量。如果您有此var,则无论VS设置如何,符号都将加载。

您还可以设置符号服务器排除,该排除将不会尝试在HKEY\U CURRENT\U USER\Software\Microsoft\symbol server\Exclutions中下载,也可能在HKEY\U LOCAL\U MACHINE\Software\Microsoft\symbol server\Exclutions中下载,或通过.ini文件下载%WINDIR%\system32\inetsrv\Symsrv.ini(使用标题[Exclutions],并将每个排除放在自己的行中)。排除是简单的模式匹配,因此使用msxml5.*例如。

不仅
\u NT\u SYMBOL\u PATH
会导致这种行为,而且对我来说是
\u NT\u ALT\u SYMBOL\u PATH
环境变量导致了延迟


(我相信我在试验WinDbg时添加了此变量)

从Visual Studio 2010开始,您可以访问:

Tools -> Options -> Debugging -> Symbols -> Specify excluded modules

并输入加载时间过长的DLL列表。我使用输出窗口给出的完整路径;可能它接受通配符或简单的文件名。

在Visual Studio 2013 Pro中,如果选中Microsoft Symbol服务器,VS将尝试在其服务器上加载所有符号,从而导致大量额外时间。

  • 手动从MS网站加载所有符号包,将其置于SSD驱动器上以提高速度:-)
  • 如果您有一个“\n t\u SYMBOL\u PATH”环境变量,请从“SRVe:\symbols*”中删除部分“”,这样您就只有符号所在的符号路径
  • 现在您支持符号,但它们不会从MS下载,而是从硬盘加载

    • 在我的例子中,这是因为我在中将“Enable.Net Source Stepping”设置为true

      Tools > Options > Debugging > General. 
      
      我没有将其设置为false,而是将“仅启用我的代码”设置为true,这会自动将“启用.Net源代码步进”设置为false。在这样做之前,它给了我一个警告:

      Enabling Just my code automatically disabled .Net framework source stepping
      
      这表明
      仅我的代码
      是相互排斥的


      我希望这对某人有所帮助。

      如果您转到调试选项->符号,然后选中“仅加载指定符号”,它将不会自动加载符号,并且调试器可以正常工作。

      这听起来很完美,但对我来说不起作用。我已经向注册表中添加了条目,创建了一个包含正确条目的symsrv.ini,并重新启动了我的计算机以防万一,但Visual Studio仍试图加载这些符号。有什么想法吗?对我来说也不行。但据我所知,此列表仅适用于PDB,而不是DLL。遗憾的是,Visual Studio 2005中没有此列表,但很高兴知道它在更高版本中存在。@RichieHindle;但是IIRC,JaredPar的方法在VC2005中起作用。实际上,使用通配符是可能的。微软提供了一个非常混乱的用户界面,而不是一个关于可能的通配符的注释。例如,我可以通过在列表中添加“DevExpress*”来禁用DevExpress符号加载。哇,太棒了!疯子在此之前,我有4秒的开始时间,它说已经“通过包含/排除设置禁用加载”。但在我添加了所有这些内容(20)后,时间缩短到了2秒(Visual Studio 2017)。必须是符号加载系统中的一个错误,即使VS在此之前假装不加载符号,这也可以减少50%(我的集合中没有_NT_SYMBOL_路径)。我从输出窗口得到符号被排除的确认(oleaut32.dll),但它还是会尝试加载该库的符号。人们通常会问这个问题,因为他们根本不需要符号,而不是因为他们不想通过互联网下载,也不知道如何在本地使用符号。他们只是想永远关闭它。@user5280911好吧,关闭它的主要动机可能是加载符号时对性能的影响。如果加载速度很快,那么不想让它消失的主要原因就消失了。天哪!实际上,将此设置为启用.Net源代码单步执行为true并仅禁用我的代码使错误消失。这与你所说的正好相反,但它起了作用。非常感谢!显然这个选项在VisualStudio2019中消失了?