Visual Studio 2010中的“浏览到查找源”

何时在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来保存虚拟机,并使用源代码的框架版本然后禁用更新。

介绍

每当从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文件

  • 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 – > Call stack

您右键单击顶部调用stak指令,然后选择“符号加载信息”。 它将显示Visual Studio尝试查找有效PDB文件的位置。

  • 1.a如果您只看到“无法找到或打开PDB文件”消息,请在任何这些位置放置有效的PDB文件。 (您可能需要向右滚动才能看到消息)停止并再次开始调试。
  • 1.b如果您看到“PDB与图像不匹配”消息,则表示以下内容。 Visual Studio找到了一个PDB文件,但是它用于另一个版本。 如果我构建ClassLibrary1.dll并将其提供给您,然后我再次构建它而不更改单行代码然后给您PDB,并且您尝试调试classLibrary1.dll您将收到此消息。 程序集及其PDB文件必须完全来自同一构建,否则您将收到此消息。 (每次进行构建时,使用组件和PDB文件中的一些唯一编号完成此检查)
  • 1.c您看到“已加载符号”消息,但仍然会禁用“浏览以查找”。 这意味着您拥有的PDB文件不适合步入式调试。 您尝试使用的某些PDB文件中没有步骤调试所需的所有信息。 我认为您可以从高级构建设置中的某个位置控制它,但我还没有尝试过,因为我希望每次构建时都生成可用的PDB文件。 如果您尝试调试.NET框架本身的源代码并且Microsoft没有为源代码放置可用的PDB文件,则会出现这种情况,但Microsoft已经放置了一些不能用于步入的PDB文件调试。 这种情况比您想象的更频繁,因为Microsoft经常对.NET Framework源代码进行更新(补丁)。 这些更新通过Windows Update以静默方式安装到您的计算机上,您会惊讶地发现,昨天您可以调试.NET Framework源代码,而今天您不能。 它们通常需要一些时间才能为最新代码提供有效的PDB文件。 在这种情况下,您可以使用.NET Reflector Pro步骤调试function或具有.NET框架版本和可用PDB文件的虚拟机,并在该计算机上禁用Windows Update。

查看文章Step Into .NET Framework 4.0源代码

如果遇到“无源可用”屏幕,请尝试按“浏览查找源”并在源目录中找到所需的文件。 您可能应该使用文件搜索来查找它。 这只执行一次,因为从现在起,Visual Studio会记住此位置并在那里搜索缺少的源文件。

我希望这是关于你在寻找什么。