什么时候在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或手头有一个虚拟机,其中有源代码的框架版本,然后禁用更新。
3条答案
按热度按时间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
Class1.cs
。然后在你的电脑上找那个文件
如果按“取消”,将显示:“没有可用的源”,在这种情况下,您将启用“浏览以查找源”。
为什么?因为你有一个有效的PDB文件,但是Visual Studio不可能知道你的计算机上有ClassLibrary 1的源代码,或者你的计算机上是否有它。这就是为什么你有对话框-〉,这样你就可以将Visual Studio指向源代码文件的确切位置。
总结
那么,当您禁用浏览查找源代码时,您会怎么做?
在Visual Studio中,打开菜单 Debug -〉Windows -〉Call stack。
右键单击顶部的调用stak指令,然后选择“符号加载信息”。它将显示Visual Studio试图查找有效PDB文件的位置。
classLibrary1.dll
,你会得到这个消息。程序集和它的PDB文件必须完全来自同一个版本,否则你会得到这个消息。(这个检查是在你每次编译的时候使用一些唯一的数字放在程序集和PDB文件中来完成的)bq8i3lrv2#
查看文章 Step Into .NET Framework 4.0 Source Code。
如果你遇到“没有可用的源代码”屏幕,尝试按“浏览查找源代码”并在源代码目录中找到你需要的文件。你可能需要使用文件搜索来找到它。这只需要一次,因为从现在开始Visual Studio会记住这个位置并在那里搜索丢失的源文件。
我希望这是关于你在寻找什么。
utugiqy63#
Visual Studio 2019中的类似问题可以通过选中“启用仅我的代码”来解决。
Debug〉Options...〉Debugging〉General〉Enable Just My Code
更多详细信息请参见How to fix debugger is looking for executioncontext.cs