事实证明,围绕这一点存在多个问题。其中一部分包括 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 源文件。
怎么回事??所以现在我下载了一些名为 NetFramework.aspx 的垃圾文件。当我打开它时,它只会冻结我的电脑。重点是什么?好吧,没有人告诉你这一点,但你必须将它重命名为 What.msi。它实际上是一个安装程序。
运行安装程序后,您的机器上某处就有完整的符号。耶!此时,您需要确保您的 Visual Studio 设置正确。
- 确保您的项目框架与您刚刚下载的源的框架相匹配。(和/或反之亦然)
- 确保启用“启用 .NET Framework 源步进”。
- 对我来说,在“选项”>“调试”>“符号”菜单中,我选择了“仅指定的模块”,但没有选择任何内容。此外,我未选中 PDB Locations,因此未选择任何内容。
- 有时平台目标是一个问题。我的设置为 AnyCPU,但您可能需要进行实验?
好的!!一切就绪,让我们这样做……失败。
现在,当您按 F11 时,它仍然只是跳过代码。好吧,如果您查看您的模块(在运行时),希望系统或 mscorlib 的符号或您的程序集的符号未加载。(那挺好的)。
为什么这么好?因为如果它们已加载,您将无法加载它们。通常,如果它们被加载,它们是从一些 janky 剥离的 PDB 位置加载的,这会让你无处可去。因此,您右键单击选择的程序集并从路径加载...,然后转到您从 MSI 安装这些 PDB 的位置。
太好了...现在,如果您尝试进入 .NET Framework 代码,或者尝试从调用堆栈加载代码,您只会收到缺少代码的错误,并且查找源代码的选项是灰色的!!好吧,我以为我们有密码!!!!我刚刚加载它。
让我们回顾一下“模块”窗口。在您要加载的程序集旁边,您可能会在版本中注意到它说“构建者:RTMGDR”或“RTMRel”之类的东西。嗯,RTMGDR 意味着当前使用的代码版本与原始版本不同。为什么不一样?因为安装了 KB 安全更新。而且由于代码与 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(按顺序)。因此,您可以稍后在研究后重新安装它们。
一旦您最终降到版本 xxxxxx.1 (RTMRel),您将 Visual Studio 运行到断点...打开您的模块...从路径加载符号...从您的 MSI 中选择您的 PDB...然后。 ... 进入您的 .NET 代码
最后!!!
现在完成后,重新安装这些 KB,但下次保持所有其他设置相同。安全很重要。