在Visual Studio 2010中何时启用“浏览到查找源”? (见下文)
此外,我想启用它,以便我可以浏览已经下载的源代码 来自http://referencesource.microsoft.com/的文件。
这很有用,因为Microsoft并不总是使用最新的补丁同时发布PDB /源代码。因此,如果我想进入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 Pro来保存或保留虚拟机,包含源代码的框架版本,然后禁用更新。
答案 0 :(得分:26)
每当从Visual Studio进行构建时,通常,除了可执行文件之外,还会获得PDB文件。您可以在..bin\Debug
或..bin\Release
目录中查看此文件。
此PDB文件保持映射到程序集中的源代码行和可执行代码。此外,完成构建的源代码文件的原始位置存储在PDB文件中。
这意味着如果您构建一个类文件位于G:\ClassLibrary\Class1.cs
的类库,则此路径将存储在ClassLibrary.pdb
内。
重要的是要记住这一点,没有PDB文件就不可能进行源代码调试。
所以,假设我在我的驱动器G:\ClassLibrary1
上构建一个类库。
我为您提供了ClassLibrary.dll
和ClassLibrary.pdb
文件,或者您可以通过从源代码管理中检出它们来获取它们。
您在项目中引用ClassLibrary.dll
并使用库中的类。
如果您现在尝试从库中进入类代码,则会发生以下情况:
Visual Studio尝试查找ClassLibrary.pdb文件in a couple of locations
1.1如果找不到,则会禁用“浏览查找源” 页。请记住,如果没有有效的PDB文件,则无法进行调试。
1.2如果确实找到了PDB文件,它会查看PDB文件并发现您正在尝试调试最初由
构建的Class1.cs
G:\ClassLibrary1\Class1.cs
并在您的计算机上查找该文件。
1.2.1如果找到,它会自动进入代码。
1.2.2如果找不到,则会出现以下对话框:
如果按“取消”,您将看到:“没有可用的来源”,在这种情况下您将启用“浏览查找源”。
为什么呢?因为您有一个有效的PDB文件,但Visual Studio无法知道您的计算机上ClassLibrary1的源代码在哪里,或者您是否在计算机上拥有它。这就是你得到对话框的原因 - >这样您就可以将Visual Studio指向源代码文件的确切位置。
那么当您进行浏览以查找源禁用时,您会做什么?
在Visual Studio中,打开菜单 Debug - > Windows - > 调用堆栈。
右键单击顶部调用stak指令,然后选择“符号加载信息”。它将显示Visual Studio尝试查找有效PDB文件的位置。
classLibrary1.dll
,您将收到此消息。程序集及其PDB文件必须完全来自同一版本,否则您将收到此消息。 (每次进行构建时,使用组件和PDB文件中的一些唯一编号完成此检查)答案 1 :(得分:0)
查看文章 Step Into .NET Framework 4.0 Source Code 。
如果遇到“No Source Available”屏幕,请尝试按“浏览查找源”并在源目录中找到所需的文件。您可能应该使用文件搜索来查找它。 这只执行一次,因为从现在起,Visual Studio会记住此位置并在那里搜索缺少的源文件。
我希望这是关于你在寻找什么。
答案 2 :(得分:0)
Visual Studio 2019中的类似问题可以通过选中“启用我的代码”来解决。
调试>选项...>调试>常规>仅启用我的代码
更多详细说明,请参见How to fix debugger is looking for executioncontext.cs