2013 年 2 月 22 日更新:Microsoft Connect 条目有来自 Alok Shriram(程序经理、基类库、.NET 框架)的说明,该问题现在应该得到解决。 Connect 条目被标记为 Resolved (Fixed):
这个问题现在应该得到解决。我们发布了对参考来源的更新。如果您的问题仍未解决,请告知我们。
一年半。
奖励链接
投票决定在 Microsoft Connect 上修复此错误。
Microsoft Social 上的线程已经持续了一年半,询问何时修复。
原始问题
如何在 Visual Studio 2010 中启用 .NET 框架源单步执行?
注意:这个问题是一个更大的整体:.NET 2.0 WinForm:支持 DPI 和默认字体更改 WinForms 控件在 ScaleControl VS2010 期间不缩放:如何启用“启用 .NET Framework 源步进”? Visual Studio 2010 Professional:如何访问“模块”窗口? Visual Studio 2010:将项目重定向到 .NET Framework 3.5 后,Properties.Settings 中断
Visual Studio 2010 带有一个新功能:
工具、选项、调试、常规、启用 .NET Framework 源单步执行
https://i.stack.imgur.com/8Gu2K.png
按照 MSDN 页面 How to: Debug .NET Framework Source 上的说明进行操作:
启用 .NET Framework 源代码调试 在“工具”菜单上,单击“选项”。在“选项”对话框中,单击“调试”类别。在“常规”框中,选中以下复选框: 启用 .NET Framework 源单步执行 启用源服务器支持
我这样做:
https://i.stack.imgur.com/1iXjt.png
注意:您会注意到,正如 MSDN 页面所指出的,并且正如我所注意到的,选中 Enable .NET Framework source stepping 将自动取消选中 **Enable Just My Code (Managed only)。我还启用了源服务器支持的诊断消息。
启用这些选项会自动为我设置符号缓存下载位置:
https://i.stack.imgur.com/VwhtM.png
注意:Microsoft 符号服务器条目已经存在(并且无法删除)。
MSDN 页面说要加载符号:
使用“模块”窗口加载框架符号 在“模块”窗口中,右键单击未加载符号的模块。您可以通过查看符号状态列来判断符号是否已加载。指向 Load Symbols From 并单击 Microsoft Symbol Servers 以从 Microsoft 公共符号服务器下载符号,或单击 Symbol Path 以从您之前存储符号的目录中加载。
我试试这个:
https://i.stack.imgur.com/6nCtS.png
然后加载所有符号:
https://i.stack.imgur.com/fk7Zm.png
我一直坐在一个断点上,即将调用 .NET 框架代码:
https://i.stack.imgur.com/LWA4Z.png
protected override void ScaleControl(SizeF factor, BoundsSpecified specified)
{
base.ScaleControl(factor, specified);
按 F11 会使调试器简单地跳到下一行:
https://i.stack.imgur.com/wA75K.png
protected override void ScaleControl(SizeF factor, BoundsSpecified specified)
{
base.ScaleControl(factor, specified);
//Record the running scale factor used
this.scaleFactor = new SizeF(
this.scaleFactor.Width * factor.Width,
this.scaleFactor.Height * factor.Height);
如何在 Visual Studio 2010 中启用 .NET Framework 源代码单步执行?
我正坐在代码中的断点处。我尝试在调用堆栈中双击一个函数。我希望这可以让我跳转到 .NET 代码:
https://i.stack.imgur.com/P8Yts.png
除了它不起作用:Visual Studio 告诉我没有可用的源:
https://i.stack.imgur.com/7jt7z.png
如何在 Visual Studio 2010 中启用 .NET Framework 源代码单步执行?
如果我在尝试进入 .NET 代码之前切换到反汇编视图(Debug -> Windows -> Disassembly),我可以看到.NET 代码中的 call
:
https://i.stack.imgur.com/LFiUp.png
当我这样做时,我最终调试了 System.Windows.Forms.ScaleControl
的反汇编:
https://i.stack.imgur.com/AdXWc.png
这与能够进入 .NET Framework 源代码不同或有用。
如何在 Visual Studio 2010 中启用 .NET Framework 源代码单步执行?
我计算机上配置的符号缓存路径确实包含符号缓存文件:
https://i.stack.imgur.com/7oShE.png
所以它正在下载 pdb
符号文件,但拒绝使用它们。
如何在 Visual Studio 2010 中启用 .NET Framework 源代码单步执行?
Leppie 建议我检查 Debug
日志(打开调试日志窗口;否则它不会记录任何内容):
Step into: Stepping over method without symbols 'System.Windows.Forms.Form.ScaleControl'
在日志的前面,我看到它为 System.Windows.Forms.dll
加载符号:
Loaded 'C:\Windows\assembly\GAC_MSIL\System.Windows.Forms\2.0.0.0__b77a5c561934e089\System.Windows.Forms.dll', Symbols loaded.
https://i.stack.imgur.com/MvyJJ.png
所以它正在找到我的符号,但声称它找不到它们。
如何在 Visual Studio 2010 中启用 .NET Framework 源代码单步执行?
来自 Microsoft Italy 的一个人建议关闭 Require source files to fully match original version:
https://i.stack.imgur.com/adGuS.png
那并没有解决它。
如何在 Visual Studio 2010 中启用 .NET Framework 源代码单步执行?
有人建议 Microsoft 的 .NET Framework 4.0 源服务器存在错误。根据该建议,我将项目切换到 .NET Framework 3.5:
https://i.stack.imgur.com/EjPKk.png
那并没有解决它。
如何在 Visual Studio 2010 中启用 .NET Framework 源代码单步执行?
某个地方的某个人无所事事地想知道是否另一个人遇到了同样的问题was using the 64-bit version of the debugger。现在,没有 64 位版本的 Visual Studio,但我尝试将我的项目从 AnyCPU 切换到 x86(它被 JITed 到 x64),在案例 Microsoft 不支持 64 位处理器:
https://i.stack.imgur.com/r826Q.png
那没有解决它:
Step into: Stepping over method without symbols 'System.Windows.Forms.Form.ScaleControl'
如何在 Visual Studio 2010 中启用 .NET Framework 源代码单步执行?
也可以看看
配置 Visual Studio 以调试 .NET Framework 源代码
VS2010无法调试.NET框架代码
尽管设置了选项,.NET 框架源单步执行仍不起作用
设置 Visual Studio 2010 以进入 Microsoft .NET 源代码
Visual Studio 2008 SP1 .NET Framework 源代码调试
Visual Studio 2008 版本 9.0.21022.8 RTM 中没有调试>模块窗口
仅针对 RTM 和 Service Pack 发布用于单步执行源代码的 PDB。因此,当安全更新出现并且它修改了您尝试调试的 dll 时,它将导致源步进无法工作(也就是说,您将获得“无可用源”和灰色的“浏览以查找源” ”)。
但是,一旦您完成了所有适当的设置,您就可以使用以下解决方法。解决方法本质上是找到导致 dll 更改的安全更新,然后将其删除。这具有在您的计算机上删除这些安全更新的明显缺点。
解决方法
确定要调试到哪个 dll(例如 System.Windows.Forms.dll) 调试时,在 Visual Studio 中打开“模块”窗口,找到“版本”列。如果版本不是 RTM 或 Service Pack 版本,则您需要执行工作流。通常,RTM dll 会说“由:RTMRel 构建”。虽然作为安全更新一部分的 dll 会显示“由:RTMGDR 构建”。注意版本号(例如 4.0.30319.269 构建者:RTMGDR) 现在,我们要查找创建此版本的更新。通过在 support.microsoft.com/kb/ 搜索 dll 和版本号来做到这一点 例如,我做了以下谷歌搜索:site:support.microsoft.com/kb System.Windows.Forms.dll 4.0.30319.269 搜索应该显示有关更新的信息。请注意地址栏中的 KB 编号。在我的示例中,地址是 http://support.microsoft.com/kb/2604121,所以我们感兴趣的是 KB2604121。转到控制面板->程序和功能,然后单击“查看已安装的更新”查找更新其中列出了 KB 编号(您可以使用右上角的搜索)。卸载该更新。对同一个 dll 重复此过程,直到 dll 恢复到其 RTMRel 版本或 SP 版本。例如,对于 System.Windows.Forms.dll,我必须先删除 KB2686827、KB2604121、KB2518870,然后才能恢复到 RTMRel 版本。
您需要对 .NET 框架中您关心调试的每个 dll 执行此操作。
完成后,在 .net 源中设置断点(例如,转到 Breakpoints 选项卡,例如 New->Break at Function,然后输入 System.Windows.Forms.Form.Form)或进入 .net 之一该dll中的方法。
不幸的是,正如 Leppie 指出的那样,Microsoft 存在问题(我得到了相同的结果,请参见
“无可用源”-Visual Studio 调试(即使已加载符号))
应该注意的是,您的尝试无论如何都会失败,因为您引用了:
微软符号服务器
代替:
参考来源.microsoft.com/symbols
请参阅 Configuring Visual Studio to Debug .NET Framework Source Code 的常见问题解答/疑难解答部分
我已经找到了答案,我想。
我追踪了 Fiddler 上发生的事情。目前似乎只有符号可用,没有来源。
当 VS 尝试从“referencesource”服务器加载符号时,它会失败 (404)。由于这失败了,我认为它无法映射到该服务器上的源文件。
在上述失败之后,它会尝试一些名为“msdl”的服务器,它会在其中找到实际的 PDB(但它似乎没有源代码信息)。
总而言之,这似乎是他们服务器的(临时)微软问题。
我确信我有一些源代码。但现在它不起作用。
编辑:
我尝试了各种 .NET 版本,结果都一样。 :(
现在,如果您安装了 SP1,它就无法正常工作。以下是关于问题形式 MS 的一些评论:http://social.msdn.microsoft.com/Forums/en-US/refsourceserver/thread/41388c7b-582b-4e3f-8178-3d38a3c99639
在我的例子中,我正在调试一个旧的 .NET 2.0 WinForms 应用程序,我得到了“源不可用”消息。我尝试了所有推荐的设置。
最终,我重新构建了应用程序以临时针对 .NET 4.5,并且能够让源步进工作。也许我的应用程序对于源步进来说太旧了。我知道,有点违背了目的,但是对于快速而肮脏的测试,它是有效的。我的错误仍然存在于 .NET 4.5 中。 :)
https://i.stack.imgur.com/IL5M3.png
您可以在此处找到参考源,可供下载:
.NET Framework 4.0 Reference source
WCF、WF 甚至 4.5 Beta / RC 等的源代码也可以在此处找到:
Microsoft Referencesource NetFramework
以下是官方说明https://referencesource.microsoft.com/setup.html
配置 Visual Studio 2013 以调试 .NET 框架 为了配置 Visual Studio 2013,请在工具 -> 选项 -> 调试 -> 常规菜单中执行以下操作: 仅禁用我的代码 禁用跨属性和运算符 禁用要求源文件完全匹配原版 Enable .NET framework source stepping Enable source server support
如果你想调试开源代码(比如 nuget 包),你可以把这个 url 添加到你的符号服务器列表中
http://srv.symbolsource.org/pdb/Public
http://www.symbolsource.org/Public/Home/VisualStudio