事实证明,围绕此问题存在多个问题。其中一部分包括 Visual Studio 2008 SP1,但这在 2013 年底几乎不是相关问题。
我的解决方案是……不要使用符号服务器。至少在 VS 2010 中,它会强制您使用“Microsoft 符号服务器”,这取决于一两个因素,可能从通用位置加载,也可能从 http://referencesource.microsoft.com/symbols 加载。
两者的问题在于,每次我使用这些符号文件位置时,它们都会被剥离 PDB。尽管您可能会在子域“http://referencesource.microsoft.com/symbols”中注意到,参考源越来越近了。
所以我所做的是导航到:Download Source,它位于同一个子域中。由于我使用的是 .NET 4.0,因此我下载了 .NET 4.0 源文件。
WTF??所以现在我下载了一些名为 NetFramework.aspx 的垃圾文件。当我打开它时,它只会冻结我的电脑。重点是什么?好吧,没有人告诉你这一点,但你必须将它重命名为 What.msi。它实际上是一个安装程序。
运行安装程序后,您的机器上的某个地方就会有完整的符号。耶!此时,您需要确保您的 Visual Studio 设置正确。
- 确保您的项目框架与您刚刚下载的源的框架相匹配。 (和/或反之亦然)
- 确保“启用 .NET Framework 源步进”已启用。
- 对我来说,在我的选项 > 调试 > 符号菜单中,我选择了“仅指定的模块”,但没有选择任何内容。另外,我取消选中了 PDB Locations,因此没有选择任何内容。
- 有时平台目标是个问题。我的设置为 AnyCPU,但您可能需要进行实验?
好的!一切就绪,让我们这样做……失败。
现在,当您按 F11 时,它仍然只是跳过代码。好吧,如果您查看您的模块(在运行时),希望系统或 mscorlib 的符号或您的程序集的符号未加载。 (很好)。
为什么这么好?因为如果它们已加载,您将无法加载它们。通常,如果它们被加载,它们是从一些 janky 剥离的 PDB 位置加载的,这会让你无处可去。因此,您右键单击选择的程序集并从路径加载...,然后转到您从 MSI 安装这些 PDB 的位置。
很好...现在如果您尝试进入 .NET Framework 代码,或者如果您尝试从调用堆栈加载代码,您只会收到缺少代码错误和查找源代码的选项是灰色的!!好吧,我以为我们有密码!!!!我刚刚加载了它。
让我们回顾一下“模块”窗口。在您要加载的程序集旁边,您可能会在版本中注意到它说“构建者:RTMGDR”或“RTMRel”之类的东西。好吧,RTMGDR 意味着当前使用的代码版本与原始版本不同。为什么不一样?因为安装了 KB 安全更新。而且由于 Code 与 PDB 不同......你不能介入。
很遗憾,您无法获得最新的 PDB。谁知道为什么……也许是因为它是一个安全更新。但是你能做的......是像这样谷歌你的版本:
“mscorlib.dll”4.0.30319.xxx 站点:support.microsoft.com/kb
您不必单击任何内容。只需查看第一个结果的 URL,您就会看到 KB 编号,如下所示:
support.microsoft.com/kb/12345
打开您的添加/删除程序(运行:appwiz.cpl),并查看已安装的更新。您将非常轻松地在您的 Visual Studio 组下找到该 KB,并且可以将其卸载。
然后再次运行 Visual Studio.. 你可能会看到一个带有旧版本的新 RTMGDR...谷歌一下,删除它的 KB...冲洗并重复。
跟踪您删除的 KB(按顺序)。因此,您可以在研究之后重新安装它们。
一旦您最终降到版本 x.x.xxxx.1 (RTMRel),您将 Visual Studio 运行到断点...打开您的模块...从路径加载符号...从您的 MSI 中选择您的 PDB。 .. 然后.... 进入您的 .NET 代码
终于!!!
现在完成后,重新安装这些 KB,但下次保持所有其他设置相同。安全很重要。