Visual Studio 2012忽略符号位置。

11

我已经禁用了“Microsoft符号服务器”,并添加了.NET 4.5符号的路径(W:\Debug\RefSrc\Symbols),这些符号是我从http://referencesource.microsoft.com/下载的。

不幸的是,当我强制载入符号,例如mscorlib.dll,Visual Studio会忽略这个文件夹,并继续从符号服务器下载符号文件。它们最终会存储在W:\Debug\SymbolsCache\MicrosoftPublicSymbols中,并且与RefSrc中的符号完全相同。

还有其他人看到了这种行为吗?

我的调试设置:

[ ] Enable Just my code
[ ] Enable .NET framework source stepping
[ ] Enable source server support

因为这个问题,我不得不禁用“.NET框架源代码调试”。


我使用相同的设置遇到了相同的问题。进程监视器显示VS甚至没有尝试访问配置的文件夹。 - Julien Lebosquain
它们大小不能相同。mscorlib.pdb的refsrc副本为21 MB。您从源服务器获取的只有780 KB,被削减了。这里没有足够的好线索来发布答案。至少右键单击Debug + Windows + Modules窗口中的mscorlib.dll,然后单击Symbol Load Information。发表您看到的内容。 - Hans Passant
@HansPassant: 您看到这种大小差异是因为您没有带有源的DLL版本,可能是由于安全补丁的原因:请参见https://dev59.com/O-o6XIcBkEYKwwoYSCc1#12432029获取更多信息。问题不在于PDB是否带有源代码,而是已经在我链接的问题中解决了。除非它们已经在缓存中,否则VS甚至不会尝试加载匹配的带源代码或不带源代码的PDB,并且将始终使用下载,即使未选中“Microsoft Symbol Servers”。 - Julien Lebosquain
“除非它们已经在缓存中,否则很奇怪。”你应该自己将它们添加到缓存中。但是,修复和安全补丁通常都是无法挽回的情况。 - Hans Passant
你可以指定符号位置文件夹,但似乎被VS忽略了。将它们复制到缓存文件夹中可以解决问题,但这不是一个实用的解决方案,特别是如果你的符号在网络位置上。 - Julien Lebosquain
1个回答

5

我不知道您在VS 2012中如何操作,因为我从未尝试过,现在也没有VS 2012,但我在VS 2010中的操作方式如下:

  1. 从主菜单选择“调试(Debug)”
  2. 选择“选项和设置(Options and settings)”
  3. 选择“调试(Debugging) -> 常规(General)”
  4. 勾选“启用.NET Framework源代码步入”并取消勾选“启用只有我的代码”
  5. 选择“调试(Debugging) -> 符号(Symbols)”
  6. 选择一个位置作为“在此目录中缓存符号(Cache symbols in this directory)”
  7. 勾选“Microsoft符号服务器(Microsoft Symbol Servers)”
  8. 点击“确定(Ok)”
  9. 以调试模式启动您的应用程序
  10. 选择“调试(Debug)”菜单项,选择“窗口(Windows)-> 模块(Modules)”
  11. 按F11键进入Microsoft .NET Framework代码(其中一些是公开的,因为据我所知,并非全部公开)

希望这能对您有所帮助。我建议禁用“启用只有我的代码”。此外,如果我记得正确,当您在打开模块窗口时右键单击要为其加载源文件的项,可以选择要从哪里加载符号。如果pdb文件与二进制文件不对应,则版本不同会导致符号无法加载。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接