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

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

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

一年半。

奖金链接

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

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

原来的问题

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


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

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

Visual Studio 2010带有一个新function:

  • 工具,选项,debugging,常规, 启用.NET Framework源代码步进

选项菜单的屏幕截图

遵循MSDN页面上的说明如何:debugging.NET Framework来源 :

启用.NET Framework源代码debugging

  1. 工具菜单上,单击选项

  2. 选项对话框中,单击debugging类别。

  3. 在“ 常规”框中,选中以下checkbox:

    • 启用.NET Framework源代码步进
    • 启用源服务器支持

我这样做:

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

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

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

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

注意Microsoft符号服务器条目已经存在(并且不能被删除)。


MSDN页面说加载符号:

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

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

  2. 指向“ 加载符号”并单击“ Microsoft符号服务器”以从Microsoft公共符号服务器或符号path下载符号,以从先前存储符号的目录加载。

我试试这个:

在这里输入图像描述

然后加载所有的符号:

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

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

代码截图,转录如下

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

F11导致debugging器只是跳到下一行:

代码截图,转录如下

 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代码( debugging – > Windows – > 反汇编 )之前切换到反汇编视图,我可以看到一个call .NET代码:

代码的屏幕截图

而当我这样做,我最终debugging反汇编System.Windows.Forms.ScaleControl

反汇编窗口的屏幕截图

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

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


我的电脑上configuration的符号cachingpath确实包含符号caching文件:

文件夹列表的屏幕截图

所以它是下载pdb符号文件,但拒绝使用它们。

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


Leppiebuild议我检查Debug日志(打开debugging日志窗口,否则它不logging任何东西):

 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. 

在这里输入图像描述

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

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


来自意大利微软的一位人士build议closuresRequire源文件以与原始版本完全匹配

选项窗口的屏幕截图

这并没有解决它。

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


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

在这里输入图像描述

这并没有解决它。

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


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

在这里输入图像描述

这并没有解决它:

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

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


也可以看看

  • configurationVisual Studio以debugging.NET Framework源代码
  • 无法在VS2010中debugging.NET框架代码
  • 尽pipe设置了选项,.NET框架源代码步进不起作用
  • 设置Visual Studio 2010以进入Microsoft .NET源代码
  • Visual Studio 2008 SP1 .NET Framework源代码debugging
  • 在Visual Studio 2008版本9.0.21022.8 RTM中没有debugging>模块窗口

用于单步执行源代码的PDB仅针对RTM和Service Pack发布。 因此,当安全更新出来,它会修改您正在尝试debugging的DLL,这将导致源步不工作(也就是说,你会得到“无源可用”与灰色“浏览find源“)。

但是,一旦你做了所有适当的设置,你可以使用下面的解决方法。 解决方法基本上是find导致dll更改的安全更新,然后将其删除。 这有一个明显的缺点,就是在你的机器上删除了这些安全更新。

解决方法

  1. 确定你想debugging到哪个DLL(例如System.Windows.Forms.dll)
  2. 在debugging时,在Visual Studio中打开“ 模块”窗口,find“ 版本”列。 如果版本不是RTM或Service Pack版本,则需要执行该工作stream程。 通常,RTM DLL会说“由RTMRel构build”。 虽然是一个安全更新的一部分的DLL会说“build立:RTMGDR”。 请注意版本号(例如,由RTMGDR构build的4.0.30319.269)
  3. 现在,我们要find创build此版本的更新。 通过在support.microsoft.com/kb/上searchdll和版本号来执行此操作。例如,我执行了以下Googlesearch: site:support.microsoft.com/kb System.Windows.Forms.dll 4.0.30319.269
  4. search应该显示有关更新的信息。 记下地址栏中的KB号码。 在我的例子中,地址是http://support.microsoft.com/kb/2604121 ,所以KB2604121是我们感兴趣的。
  5. 转到控制面板 – >程序和function,然后单击“查看已安装的更新”
  6. 查找列出KB编号的更新(可以使用右上angular的search)。
  7. 卸载该更新。
  8. 重复此过程为同一个dll,直到dll回到它的RTMRel版本或SP版本。 例如,对于System.Windows.Forms.dll,我必须在返回到RTMRel版本之前删除KB2686827,KB2604121,KB2518870。

您需要为.NET框架中的每个dll执行此操作,您可以关心它们的debugging情况。

完成之后,在.net源代码中设置一个断点(例如,进入断点标签,比如New-> Break at Function,然后inputSystem.Windows.Forms.Form.Form),或者进入一个.net在该DLL的方法。

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

  • “没有可用的源代码” – Visual Studiodebugging(即使符号已经加载) )

应该指出,你的尝试会失败,因为你引用:

  • Microsoft符号服务器

代替:

  • referencesource.microsoft.com/symbols

请参阅configurationVisual Studio以debugging.NET Framework源代码的FAQ /疑难解答部分

我想,我find了答案。

我追溯了小提琴手上发生的事情。 似乎只有符号是可用的,没有来源。

当VS尝试从“referencesource”服务器加载符号时,它将失败(404)。 由于这个失败,我认为它不能映射到该服务器上的源文件。

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

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

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

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

我相信我有一段时间的源代码。 但现在它不工作。

编辑:

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

现在,如果您安装了SP1,则无法正常工作。 以下是有关MS问题表单的一些注释: http : //social.msdn.microsoft.com/Forums/en-US/refsourceserver/thread/41388c7b-582b-4e3f-8178-3d38a3c99639

你可以在这里find参考资源,可以下载:

.NET Framework 4.0参考源

WCF,WF甚至是4.5 Beta / RC的源代码也可以在这里find:

Microsoft Referencesource NetFramework

这里是官方说明https://referencesource.microsoft.com/setup.html

configurationVisual Studio 2013以debugging.NET框架

为了configurationVisual Studio 2013,请在工具 – >选项 – >debugging – >常规菜单中执行以下操作:

  • 只禁用我的代码
  • 禁用跨越属性和操作符
  • 禁用要求源文件完全匹配的原始版本
  • 启用.NET框架源码步进
  • 启用源服务器支持

如果你想debugging开源代码(比如nuget包),你可以将这个url添加到你的符号服务器列表中

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

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