debugging Visual Studio 2010中的“浏览以查找源代码”

chy5wohz  于 2023-03-23  发布在  其他
关注(0)|答案(3)|浏览(141)

什么时候在Visual Studio 2010中启用“浏览以查找源代码”?(请参见下文)

另外,我希望启用它,以便浏览已经从http://referencesource.microsoft.com/下载的源代码文件。
这将是有用的,因为微软并不总是在同一时间发布PDB/源代码与他们的最新补丁。因此,如果我想进入DateTime,我真的不关心最新的补丁,不涉及DateTime。我只想浏览到它的代码,我从http://referencesource.microsoft.com/下载。
经过一番调查,我发现 * dia 2dump * 是查看PDB文件内容的有用工具。(它位于C:\Program Files (x86)\Microsoft Visual Studio 10.0\DIA SDK\Samples\DIA2Dump\中)
看起来当我看不到DateTime之类的源代码时,使用.NET Framework步进,实际上下载了一个mscorlib.pdb文件。
但是如果你用 * dia 2dump * 查看它的内部,它并不包含源文件Map。换句话说,它是无用的,因为即使你可以像我最初的想法一样浏览到源代码,它也不会工作,因为没有源文件Map,也没有函数的开始地址,还有很多东西丢失了:(
我认为这里的解决方案是使用.NET Reflector Pro或手头有一个虚拟机,其中有源代码的框架版本,然后禁用更新。

afdcj2ne

afdcj2ne1#

简介

无论何时从Visual Studio进行构建,通常情况下,除了可执行文件外,还会获得一个PDB文件。您可以在..bin\Debug..bin\Release目录中看到此文件。此PDB文件将Map到程序集中的源代码行和可执行代码。此外,源代码文件的原始位置(从该源代码文件进行构建)存储在PDB文件中。这意味着如果您构建的类库具有位于G:\ClassLibrary\Class1.cs的单个文件,这个路径将被存储在ClassLibrary.pdb中。重要的是要记住,如果没有PDB文件,就不可能进行源代码的单步调试。

真实场景

因此,假设我在驱动器G:\ClassLibrary1上构建一个类库。
我给予你一个ClassLibrary.dll和一个ClassLibrary.pdb文件,或者你可以从源代码管理中 checkout 它们。
在项目中引用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不可能知道你的计算机上有ClassLibrary 1的源代码,或者你的计算机上是否有它。这就是为什么你有对话框-〉,这样你就可以将Visual Studio指向源代码文件的确切位置。

总结

那么,当您禁用浏览查找源代码时,您会怎么做?
在Visual Studio中,打开菜单 Debug -〉Windows -〉Call stack
右键单击顶部的调用stak指令,然后选择“符号加载信息”。它将显示Visual Studio试图查找有效PDB文件的位置。

  • 1.a如果你只看到“Cannot find or open PDB file”消息,请在这些位置中的任何一个位置放置一个有效的PDB文件。(你可能需要向右滚动才能看到这些消息)停止并重新开始调试。
  • 1.b如果你看到一个“PDB does not match the image”消息,它意味着以下内容。Visual Studio已经找到了一个PDB文件,但它是用于另一个构建的。如果我构建ClassLibrary1.dll并将其提供给你,然后我再次构建它而不更改一行代码,然后将PDB提供给你,如果你试着调试classLibrary1.dll,你会得到这个消息。程序集和它的PDB文件必须完全来自同一个版本,否则你会得到这个消息。(这个检查是在你每次编译的时候使用一些唯一的数字放在程序集和PDB文件中来完成的)
  • 1.c你看到一个“symbols loaded”消息,但仍然得到一个“Browse to find”禁用.这意味着你有PDB文件是不是好的单步调试.有些PDB文件,你尝试使用不具备所有的信息,在他们必要的单步调试.我认为你可以控制从某处在高级构建设置,但我还没有尝试过,虽然,因为我希望每次构建时都能生成可用的PDB文件。如果你试图调试.NET框架本身的源代码,而Microsoft没有为源代码放置可用的PDB文件,这种情况经常发生。但是微软放了一些PDB文件,这些文件不能用于单步调试。这种情况发生的频率比你想象的要高,因为微软经常会更新这些更新通过Windows Update静默安装到您的计算机上,你会惊讶地发现,昨天你可以调试.NET Framework源代码,而今天你不能。通常需要一段时间,直到他们为最新的代码放置一个有效的PDB文件。在这种情况下,你可以使用.NET Reflector Pro步骤-调试功能或具有.NET Framework版本和可用PDB文件的虚拟机,并在该计算机上禁用Windows Update。
bq8i3lrv

bq8i3lrv2#

查看文章 Step Into .NET Framework 4.0 Source Code
如果你遇到“没有可用的源代码”屏幕,尝试按“浏览查找源代码”并在源代码目录中找到你需要的文件。你可能需要使用文件搜索来找到它。这只需要一次,因为从现在开始Visual Studio会记住这个位置并在那里搜索丢失的源文件。
我希望这是关于你在寻找什么。

utugiqy6

utugiqy63#

Visual Studio 2019中的类似问题可以通过选中“启用仅我的代码”来解决。
Debug〉Options...〉Debugging〉General〉Enable Just My Code

更多详细信息请参见How to fix debugger is looking for executioncontext.cs

相关问题