首页 文章

如何启用“启用.NET Framework源步进”?

提问于
浏览
113

Update 22nd Feb 2013 :Microsoft Connect条目包含来自Alok Shriram(程序管理器,基类库,.NET Framework)的注释,现在应该解决该问题 . Connect条目标记为已解决(已修复):

现在应该修复此问题 . 我们发布了参考资料的更新 . 如果您的问题仍未解决,请告知我们 .

一年半 .

奖金链接

原始问题

如何在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附带了一项新功能:

  • 工具,选项,调试,常规, Enable .NET Framework source stepping

Screenshot of options menu

按照MSDN页面How to: Debug .NET Framework Source上的说明操作:

启用.NET Framework源调试在“工具”菜单上,单击“选项” . 在“选项”对话框中,单击“调试”类别 . 在“常规”框中,选中以下复选框:启用.NET Framework源步骤启用源服务器支持

我这样做:

Screenshot of options menu, highlighting the relevant options selected

Note :您将注意到,正如MSDN页面所说,并且正如我所注意到的那样,检查 Enable .NET Framework source stepping 将自动取消选中**启用我的代码(仅管理) . 我还启用了源服务器支持的诊断消息 .

启用这些选项会自动为我设置符号缓存下载位置:

Screenshot of options menu, showing cache directory (highlighted)

NoteMicrosoft Symbol Server 条目已存在(无法删除) .


MSDN页面表示加载符号:

使用“模块”窗口加载框架符号在“模块”窗口中,右键单击未加载符号的模块 . 您可以通过查看符号状态列来判断符号是否已加载 . 指向“加载符号”并单击“Microsoft符号服务器”以从Microsoft公共符号服务器或符号路径下载符号,以从先前存储符号的目录加载 .

我试试这个:

enter image description here

然后加载所有符号:

Screenshot of modules window, as described above

我一直坐在断点上,即将调用.NET框架代码:

Screenshot of code, transcribed below

protected override void ScaleControl(SizeF factor, BoundsSpecified specified)
{
    base.ScaleControl(factor, specified);

按F11会导致调试器只是跳到下一行:

Screenshot of code, transcribed below

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代码:

enter image description here

除了它不起作用:Visual Studio告诉我没有可用的源:

Screenshot of error message saying No Source Available

如何在Visual Studio 2010中启用.NET Framework源步进?


如果我在尝试进入.NET代码之前切换到反汇编视图( Debug - > Windows - > Disassembly ),我可以在.NET代码中看到 call

Screenshot of code

当我这样做时,我最终调试了 System.Windows.Forms.ScaleControl 的反汇编:

Screenshot of disassembly window

这与能够进入.NET Framework源的不同或有用 .

如何在Visual Studio 2010中启用.NET Framework源步进?


我计算机上配置的符号缓存路径包含符号缓存文件:

Screenshot of folder listing

所以它正在下载 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.

enter image description here

所以它找到了我的符号,但声称找不到它们 .

如何在Visual Studio 2010中启用.NET Framework源步进?


微软意大利的一个人建议关闭 Require source files to exactly match original version

Screenshot of options window

这没有解决它 .

如何在Visual Studio 2010中启用.NET Framework源步进?


有人建议微软的源服务器存在 .NET Framework 4.0 的错误 . 根据该建议,我将项目切换到目标 .NET Framework 3.5

enter image description here

这没有解决它 .

如何在Visual Studio 2010中启用.NET Framework源步进?


有人在某个地方想知道另一个人是否遇到同样的问题was using the 64-bit version of the debugger . 现在,没有64位版本的Visual Studio,但我尝试将我的项目从 AnyCPU 切换到 x86 (它被JIT到x64),以防微软不支持64位处理器:

enter image description here

这没有解决它:

Step into: Stepping over method without symbols 'System.Windows.Forms.Form.ScaleControl'

如何在Visual Studio 2010中启用.NET Framework源步进?


另见

8 回答

  • 6

    用于单步执行源代码的PDB仅针对RTM和Service Pack发布 . 因此,当安全更新出来并且它修改了您尝试调试的dll时,它将导致源步进无法工作(也就是说,您将获得“无源可用”并显示为灰色“浏览以查找源“) .

    但是,一旦完成了所有适当的设置,就可以使用以下解决方法 . 解决方法主要是查找导致dll更改的安全更新,然后删除它们 . 这有明显的缺点,即在您的计算机上删除这些安全更新 .

    解决方法

    • 确定要调试的DLL(例如System.Windows.Forms.dll)

    • 调试时,在Visual Studio中打开 Modules 窗口,找到Version列 . 如果版本不是RTM或Service Pack版本,那么您将需要执行工作流程 . 通常,RTM dll会说"built by: RTMRel" . 虽然属于安全更新的dll会说"built by: RTMGDR" . 请注意版本号(例如,由RTMGDR构建的4.0.30319.269)

    • 现在,我们要查找创建此版本的更新 . 通过在support.microsoft.com/kb/上搜索dll和版本号来执行此操作 . 例如,我执行了以下Google搜索: site:support.microsoft.com/kb System.Windows.Forms.dll 4.0.30319.269

    • 搜索应显示有关更新的信息 . 请注意地址栏中的KB编号 . 在我的例子中,地址是 http://support.microsoft.com/kb/2604121 ,因此KB2604121是我们感兴趣的 .

    • 转到“控制面板” - >“程序和功能”,然后单击“"View Installed Updates"”

    • 查找列出KB编号的更新(您可以使用右上角的搜索框) .

    • 卸载该更新 .

    • 对此相同的dll重复此过程,直到dll返回其RTMRel版本或SP版本 . 例如,对于System.Windows.Forms.dll,我必须在它返回到RTMRel版本之前删除KB2686827,KB2604121,KB2518870 .

    您需要为.NET框架中您关心调试的每个dll执行此操作 .

    完成后,在.net源代码中设置一个断点(例如,转到Breakpoints选项卡,比如New-> Break at Function,然后输入System.Windows.Forms.Form.Form)或者进入.net之一.net那个dll中的方法 .

  • 4

    不幸的是,正如Leppie所指出的那样,微软存在一个问题(我得到了同样的结果

    应该注意的是,无论如何你的尝试都会失败,因为你引用了:

    • Microsoft Symbol Server

    代替:

    • referencesource.microsoft.com/symbols

    请参阅Configuring Visual Studio to Debug .NET Framework Source Code的常见问题/故障排除部分

  • 0

    我想,我找到了答案 .

    我追踪了小提琴手上发生的事情 . 似乎只有符号目前可用,没有来源 .

    当VS尝试从'referencesource'服务器加载符号时,它失败(404) . 由于这失败了,我认为它无法映射到该服务器上的源文件 .

    http://referencesource.microsoft.com/symbols/mscorlib.pdb/ED96A7F38A2940F39B9CA7AD9BC5CB671/mscorlib.pdb

    在上述失败之后,它会尝试一些名为“msdl”的服务器,在那里找到实际的PDB(但看起来这个没有源代码信息) .

    http://msdl.microsoft.com/download/symbols/mscorlib.pdb/ED96A7F38A2940F39B9CA7AD9BC5CB671/mscorlib.pd_

    总而言之,它似乎是他们的服务器的(临时)Microsoft问题 .

    我确信我有一些源代码 . 但现在它没有用 .

    Edit:

    我尝试了各种.NET版本,结果都一样 . :(

  • 1

    目前,如果安装了SP1,则无法正常工作 . 以下是关于问题形式MS的一些评论:http://social.msdn.microsoft.com/Forums/en-US/refsourceserver/thread/41388c7b-582b-4e3f-8178-3d38a3c99639

  • -1

    您可以在此处找到参考源,可供下载:

    .NET Framework 4.0 Reference source

    WCF,WF,甚至4.5 Beta / RC以及更多的来源也可以在那里找到:

    Microsoft Referencesource NetFramework

  • 34

    以下是官方说明https://referencesource.microsoft.com/setup.html

    配置Visual Studio 2013以调试.NET框架为了配置Visual Studio 2013,请在工具 - >选项 - >调试 - >常规菜单中执行以下操作:仅禁用我的代码禁用步骤属性和运算符禁用需要源文件到匹配原始版本启用.NET框架源步骤启用源服务器支持

  • 0

    在我的情况下,我正在调试一个旧的 .NET 2.0 WinForms 应用程序,我得到了 "Source Not Available" 消息 . 我尝试了所有推荐的设置 .

    最终,我重新构建了应用程序以临时定位 .NET 4.5 并且能够让源代码步进工作 . 也许我的应用程序太旧了,无法使用源代码 . 我知道,有点失败的目的,但对于快速和肮脏的测试它是有效的 . 我所遇到的错误仍然存在于 .NET 4.5 中 . :)

    Target Framework

  • 0

    如果要调试开源代码(例如nuget包),可以将此URL添加到符号服务器列表中

    http://srv.symbolsource.org/pdb/Public

    http://www.symbolsource.org/Public/Home/VisualStudio

相关问题