【问题标题】:Issue with Symbols - can't step into .NET code符号问题 - 无法进入 .NET 代码
【发布时间】:2011-07-08 13:25:57
【问题描述】:

我无法让 Visual Studio 2010 SP1 进入任何 .NET Framework 类,我在 Internet 上找到了很多指南,但它们都不起作用...

这是输出窗口的内容:

Step into: Stepping over method without symbols 'System.Collections.Generic.SortedSet<Shared.Optimization.Solution<GaTest.CurveFitSimplex,double>>.Remove'

这是整个输出窗口的内容:

'GaTest.vshost.exe' (Managed (v4.0.30319)): Loaded 'C:\Windows\Microsoft.Net\assembly\GAC_32\mscorlib\v4.0_4.0.0.0__b77a5c561934e089\mscorlib.dll', Symbols loaded.
'GaTest.vshost.exe' (Managed (v4.0.30319)): Loaded 'C:\Windows\assembly\GAC_MSIL\Microsoft.VisualStudio.HostingProcess.Utilities\10.0.0.0__b03f5f7f11d50a3a\Microsoft.VisualStudio.HostingProcess.Utilities.dll', Symbols loaded.
'GaTest.vshost.exe' (Managed (v4.0.30319)): Loaded 'C:\Windows\Microsoft.Net\assembly\GAC_MSIL\System.Windows.Forms\v4.0_4.0.0.0__b77a5c561934e089\System.Windows.Forms.dll', Symbols loaded.
'GaTest.vshost.exe' (Managed (v4.0.30319)): Loaded 'C:\Windows\Microsoft.Net\assembly\GAC_MSIL\System.Drawing\v4.0_4.0.0.0__b03f5f7f11d50a3a\System.Drawing.dll', Symbols loaded.
'GaTest.vshost.exe' (Managed (v4.0.30319)): Loaded 'C:\Windows\Microsoft.Net\assembly\GAC_MSIL\System\v4.0_4.0.0.0__b77a5c561934e089\System.dll', Symbols loaded.
'GaTest.vshost.exe' (Managed (v4.0.30319)): Loaded 'C:\Windows\assembly\GAC_MSIL\Microsoft.VisualStudio.HostingProcess.Utilities.Sync\10.0.0.0__b03f5f7f11d50a3a\Microsoft.VisualStudio.HostingProcess.Utilities.Sync.dll', Symbols loaded.
'GaTest.vshost.exe' (Managed (v4.0.30319)): Loaded 'C:\Windows\assembly\GAC_MSIL\Microsoft.VisualStudio.Debugger.Runtime\10.0.0.0__b03f5f7f11d50a3a\Microsoft.VisualStudio.Debugger.Runtime.dll', Symbols loaded.
'GaTest.vshost.exe' (Managed (v4.0.30319)): Loaded 'C:\Users\Lu4\documents\visual studio 2010\Projects\Estimator\GaTest\bin\Debug\GaTest.vshost.exe', Symbols loaded.
'GaTest.vshost.exe' (Managed (v4.0.30319)): Loaded 'C:\Windows\Microsoft.Net\assembly\GAC_MSIL\System.Core\v4.0_4.0.0.0__b77a5c561934e089\System.Core.dll', Symbols loaded.
'GaTest.vshost.exe' (Managed (v4.0.30319)): Loaded 'C:\Windows\Microsoft.Net\assembly\GAC_MSIL\System.Xml.Linq\v4.0_4.0.0.0__b77a5c561934e089\System.Xml.Linq.dll', Symbols loaded.
'GaTest.vshost.exe' (Managed (v4.0.30319)): Loaded 'C:\Windows\Microsoft.Net\assembly\GAC_MSIL\System.Data.DataSetExtensions\v4.0_4.0.0.0__b77a5c561934e089\System.Data.DataSetExtensions.dll', Symbols loaded.
'GaTest.vshost.exe' (Managed (v4.0.30319)): Loaded 'C:\Windows\Microsoft.Net\assembly\GAC_MSIL\Microsoft.CSharp\v4.0_4.0.0.0__b03f5f7f11d50a3a\Microsoft.CSharp.dll', Symbols loaded.
'GaTest.vshost.exe' (Managed (v4.0.30319)): Loaded 'C:\Windows\Microsoft.Net\assembly\GAC_32\System.Data\v4.0_4.0.0.0__b77a5c561934e089\System.Data.dll', Symbols loaded.
'GaTest.vshost.exe' (Managed (v4.0.30319)): Loaded 'C:\Windows\Microsoft.Net\assembly\GAC_MSIL\System.Xml\v4.0_4.0.0.0__b77a5c561934e089\System.Xml.dll', Symbols loaded.
The thread 'vshost.NotifyLoad' (0x1444) has exited with code 0 (0x0).
The thread '<No Name>' (0x3d8) has exited with code 0 (0x0).
The thread '<No Name>' (0x10a8) has exited with code 0 (0x0).
The thread 'vshost.LoadReference' (0xc40) has exited with code 0 (0x0).
'GaTest.vshost.exe' (Managed (v4.0.30319)): Loaded 'C:\Users\Lu4\documents\visual studio 2010\Projects\Estimator\GaTest\bin\Debug\GaTest.exe', Symbols loaded.
'GaTest.vshost.exe' (Managed (v4.0.30319)): Loaded 'C:\Users\Lu4\documents\visual studio 2010\Projects\Estimator\GaTest\bin\Debug\Shared.dll', Symbols loaded.
Step into: Stepping over method without symbols 'System.Collections.Generic.SortedSet<Shared.Optimization.Solution<GaTest.CurveFitSimplex,double>>.Remove'
'GaTest.vshost.exe' (Managed (v4.0.30319)): Loaded 'C:\Windows\Microsoft.Net\assembly\GAC_MSIL\System.Configuration\v4.0_4.0.0.0__b03f5f7f11d50a3a\System.Configuration.dll', Symbols loaded.

【问题讨论】:

标签: visual-studio visual-studio-2010 symbols


【解决方案1】:

简答: http://referencesource.microsoft.com/downloadsetup.aspx

长答案:

通常 PDB 文件只是源代码和汇编 IL 代码之间的映射。要使其工作,您需要将源代码下载到 PDB 中的“硬编码”位置。 您只需在文本查看器中查看 PDB 文件即可找到此位置。例如,如果你看到 System.pdb,你会看到这样的行:

f:\dd\ndp\fx\src\net\system\net\websockets\websocketconnectionstream.cs f:\dd\ndp\fx\src\services\monitoring\system\diagnosticts\eventloginternal.cs

有一些记录不充分的方法可以覆盖此行为,但这是另一回事。 您还需要确保在 Visual Studio 中正确配置了调试设置:Tools\Options\Debugging\General

您可以从here下载源代码和详细说明。

【讨论】:

【解决方案2】:

The article Philipp Munin 提到的一步一步地解释了如何能够进入(调试).NET Framework 代码。但是,如果您不想下载整个框架并想单步执行特定程序集,则可以遵循稍微简单的过程:

(这些是在 VS2015 中测试的,调试选项与 VS2010 中的略有不同)

  1. 确保您可以单步执行您自己的其他代码:

    调试 → 选项 → 常规

    • 必须清除启用“仅我的代码”
    • 必须选中启用 .NET Framework 源步进(这会在附加到进程时不时触发符号下载,但可能会被取消)
    • 应清除跳过属性和运算符
    • 应检查启用的源服务器支持
  2. 确保您的程序集的符号已加载(例如System.Data.dll

    • 转到调试 → Windows → 模块
    • System.Data.dll 过滤器
    • 右键单击 → 符号设置 → 检查 Microsoft 符号服务器
    • 再次右键单击 → 加载符号

您可能不清楚 Microsoft 符号服务器,因为符号已被缓存。

现在您可以进入System.Data.dll 中定义的类的方法。

明显的副作用:如果启用(抛出)异常,许多异常可能会中断应用程序启动(框架中的“隐藏”异常)。这可以通过取消选中特定异常类型或在应用程序启动完成后手动附加(或Reattaching)来解决。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多