何时在 Visual Studio 2010 中启用“浏览以查找源”? (见下文)
另外,我想启用它,以便我可以浏览到已下载的源代码
来自 http://referencesource.microsoft.com/ 的文件.
这会很有用,因为 Microsoft 并不总是发布 PDB/source code 与他们的最新补丁同时进行。因此,例如,如果我想进入 DateTime,我真的不关心不涉及 DateTime 的最新补丁。我只想浏览我从 http://referencesource.microsoft.com/ 下载的代码.
经过一些调查,我发现 dia2dump 是查看 PDB 文件内容的有用工具。 (它在 C:\Program Files (x86)\Microsoft Visual Studio 10.0\DIA SDK\Samples\DIA2Dump\
中)
看起来当我看不到 DateTime 之类的源代码时,使用 .NET Framework 步进,mscorlib.pdb
文件实际上被下载。
但是如果你用 dia2dump 看里面,它不包含源文件映射。换句话说,没用,因为即使您可以像我最初的想法一样浏览源代码,它也不起作用,因为没有源文件映射和函数的起始地址,并且缺少很多东西:(
我认为这里的解决方案是使用 .NET Reflector支持或保留虚拟机,并发布具有源代码的框架,然后禁用更新。
最佳答案
介绍
每当你从 Visual Studio 进行构建时,通常,你也会得到一个 PDB除了可执行文件之外的文件。您可以在 ..bin\Debug
中看到此文件或 ..bin\Release
目录。
此 PDB 文件保留到您的源代码行和程序集中的可执行代码的映射。此外,完成构建的源代码文件的原始位置存储在 PDB 文件中。
这意味着,如果你构建一个类库,它有一个位于 G:\ClassLibrary\Class1.cs
的文件。 ,此路径将存储在 ClassLibrary.pdb
中.
重要的是要记住,如果没有 PDB 文件,就不可能进行源代码单步调试。
真实场景
所以,假设我在我的驱动器上做了一个构建 G:\ClassLibrary1
,对于类库。
我给你一个ClassLibrary.dll
和一个 ClassLibrary.pdb
文件,或者您通过从源代码管理中 check out 它们来获取它们。
您引用了 ClassLibrary.dll
在您的项目中,您使用库中的一个类。
如果您现在尝试从库中单步执行类代码,则会发生以下情况:
Visual Studio 尝试定位 ClassLibrary.pdb 文件 in a couple of locations
页。请记住,如果没有有效的 PDB 文件,您将无法进行调试。
Class1.cs
它最初是从G:\ClassLibrary1\Class1.cs
并在您的计算机上查找该文件。
如果您按取消,您将看到:“没有可用的源”,并且在这种情况下您将启用“浏览以查找源”。
为什么?因为你有一个有效的 PDB 文件,但 Visual Studio 不可能知道你的计算机上 ClassLibrary1 的源代码在哪里,或者你的计算机上是否有它。这就是您获得对话框 -> 的原因,以便您可以将 Visual Studio 指向源代码文件的确切位置。
最后的笔记
那么,当您无法浏览查找源时,您会怎么做?
在 Visual Studio 中,打开菜单 Debug -> Windows -> Call stack。
您右键单击顶部的 call stak 指令,然后选择“符号加载信息”。它将显示 Visual Studio 尝试查找有效 PDB 文件的位置。
调试
classLibrary1.dll
你会收到这条消息。程序集及其 PDB 文件必须完全来自同一个版本,否则您将收到此消息。 (此检查是使用在每次构建时放入程序集和 PDB 文件中的一些唯一编号来完成的)关于c# - Visual Studio 2010 中的 "Browse To Find Source",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6030474/