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

更新2013年2月22日 :Microsoft Connect条目已经从Alok Shriram(程序管理器,基类库,.NET Framework)注意到现在应该解决该问题。 连接条目标记为已解决(固定):

现在应该修复这个问题。 我们发布了对参考资料的更新。 如果您的问题仍未解决,请告诉我们。

一年半。

奖金链接

  • 表决该错误在Microsoft Connect上修复。

  • 微软社交网络已经持续了一年半的时间,询问它什么时候会修复。

  • 原始问题

    如何在Visual Studio 2010中启用.NET框架源代码步进?


    注意 :这个问题是一个更大的整体:

  • .NET 2.0 WinForm:支持DPI和默认字体更改
  • 在ScaleControl中,WinForms控件不能缩放
  • VS2010:如何启用“启用.NET框架源代码”?
  • Visual Studio 2010专业版:如何访问模块窗口?
  • 将项目重定向到.NET Framework 3.5后,Visual Studio 2010:Properties.Settings被破坏

  • Visual Studio 2010带有一项新功能:

  • 工具,选项,调试,常规, 启用.NET Framework源代码步进
  • 选项菜单的屏幕截图

    遵循MSDN页面上的说明如何:调试.NET Framework源代码:

    启用.NET Framework源代码调试

  • 工具菜单上,单击选项

  • 选项对话框中,单击调试类别。

  • 在“ 常规”框中,选择以下复选框:

  • 启用.NET Framework源代码步进
  • 启用源服务器支持
  • 我这样做:

    选项菜单的屏幕截图,突出显示所选的相关选项

    注意 :您将注意到,正如MSDN页面注释,以及我注意到的,检查启用.NET Framework源代码步进将自动取消选中**启用只是我的代码(仅限管理)。 我还启用了源服务器支持的诊断消息。

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

    选项菜单的屏幕快照,显示缓存目录(突出显示)

    注意Microsoft Symbol Server条目已经存在(并且不能被删除)。


    MSDN页面说加载符号:

    使用“模块”窗口加载框架符号

  • 在“ 模块”窗口中,右键单击未加载符号的模块。 您可以通过查看符号状态列来判断符号是否已加载。

  • 指向加载符号并单击Microsoft符号服务器以从Microsoft公共符号服务器或符号路径下载符号,以便从之前存储符号的目录加载。

  • 我试试这个:

    在这里输入图像描述

    然后加载所有符号:

    如上所述,模块窗口的屏幕截图

    我一直在坐在一个断点上,它正在调用.NET框架代码:

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

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

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

    在这里输入图像描述

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

    错误消息的屏幕截图显示无源可用

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


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

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

    反汇编窗口的屏幕截图

    这与.NET Framework源代码不一样,也不一样有用。

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


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

    文件夹清单的截图

    所以它下载了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:WindowsassemblyGAC_MSILSystem.Windows.Forms2.0.0.0__b77a5c561934e089System.Windows.Forms.dll', Symbols loaded.
    

    在这里输入图像描述

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

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


    来自微软意大利的人建议关闭Require源文件以完全匹配原始版本

    选项窗口的屏幕截图

    这并没有解决它。

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


    有人提出,Microsoft的.NET Framework 4.0源服务器存在一个错误。 遵循这个建议,我将项目切换到了.NET Framework 3.5的目标:

    在这里输入图像描述

    这并没有解决它。

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


    有人在某处空闲地想知道另一个遇到同样问题的人是否正在使用64位版本的调试器。 现在,没有64位版本的Visual Studio,但是我试图将我的项目从AnyCPU切换到x86 (它被JITed转换为x64),以防Microsoft不支持64位处理器:

    在这里输入图像描述

    这并没有解决它:

    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中的“无调试”>“模块”窗口

  • 用于单步执行源代码的PDB仅发布用于RTM和Service Pack。 因此,当安全更新出来并且它修改了你正在尝试调试的dll时,它将导致源代码步进不起作用(也就是说,你将得到“无源代码”并且灰显“Browse to find Source “)。

    但是,一旦您进行了所有适当的设置,就可以使用以下解决方法。 解决方法主要是找到导致dll更改的安全更新,然后将其删除。 这在您的计算机上删除了这些安全更新的明显缺点。

    解决方法

  • 确定你想调试到哪个DLL(例如System.Windows.Forms.dll)
  • 在调试时,在Visual Studio中打开Modules窗口,找到Version列。 如果版本不是RTM或Service Pack版本,那么您需要执行工作流程。 RTM DLL通常会说“由RTMRel构建”。 虽然作为安全更新一部分的DLL会说“由RTMGDR构建”。 请注意版本号(例如,由RTMGDR构建的4.0.30319.269)
  • 现在,我们想要找到创建此版本的更新。 通过在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,我必须在返回到RTMRel版本之前删除KB2686827,KB2604121,KB2518870。
  • 你需要为你关心的.NET框架中的每个dll执行此操作。

    完成之后,在.net源文件中设置一个断点(例如,进入Breakpoints选项卡,例如New-> Break at Function,然后输入System.Windows.Forms.Form.Form),或者进入一个.net方法在该DLL。


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

  • “无源代码” - Visual Studio调试(即使符号已经加载))
  • 应该指出,你的尝试会失败,因为你引用:

  • Microsoft符号服务器
  • 代替:

  • referencesource.microsoft.com/symbols
  • 请参阅配置Visual Studio以调试.NET Framework源代码的FAQ /疑难解答部分


    我想,我找到了答案。

    我追溯了小提琴手上发生的事情。 似乎只有符号现在可用,并且没有任何来源。

    当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_

    总而言之,这似乎是他们的服务器(临时)微软问题。

    我确信我有一段时间的源代码。 但现在它不起作用。

    编辑:

    我尝试了各种.NET版本,所有相同的结果。 :(

    链接地址: http://www.djcxy.com/p/12937.html

    上一篇: How do you enable "Enable .NET Framework source stepping"?

    下一篇: Why won't my symbols (pdb) load from a local path?