【问题标题】:Symbols loaded, but still can't step into .Net source符号已加载,但仍无法进入 .Net 源代码
【发布时间】:2016-12-16 22:20:17
【问题描述】:

我正在尝试查看从调用连接到 Internet 的 Web API 时返回的原始响应消息。调用代码如下:

object[] results = this.Invoke("MethodName", new object[] { requestObject });

问题是,在调试时,results 变量已经完全反序列化了,例如我感兴趣的日期属性已经是 DateTime 类型。

所以我做了以下事情:

  1. 关闭“仅启用我的代码”。

  2. 开启“启用 .Net Framework 源代码步进”。

  3. 启用符号加载并确保 System.Web.Services 模块已加载符号(“已加载符号。”):

    System.Web.Services.dll
    C:\WINDOWS\Microsoft.Net\assembly\GAC_MSIL\System.Web.Services\v4.0_4.0.0.0__b03f5f7f11d50a3a\System.Web.Services.dll
    C:\Users\user\AppData\Local\Temp\SymbolCache\System.Web.Services.pdb\312122031d1b4f30b59771eb845018121\System.Web.Services.pdb
    
  4. 我从SoapHttpClientProtocol.cs(我的客户端代码调用的那个)的第 163 行开始在以下方法中放置了一个断点:

    protected object[] Invoke(string methodName, object[] parameters)
    
  5. 我开始调试项目并使用我的 UI 来触发发出请求的代码。当我到达上面的Invoke 行并按 F11 时,它会尝试远程调试并进入远程服务器:

    微软视觉工作室

    无法自动进入服务器。连接到服务器计算机“api.example.com”失败。 Visual Studio 2015 远程调试器 (MSVSMON.EXE) 似乎没有在远程计算机上运行。这可能是因为防火墙阻止了与远程计算机的通信。有关配置远程调试的帮助,请参阅帮助。

    注意:我不想做远程调试,我只想进入.Net代码。

    点击 OK 后,它会转到我的客户端代码中的下一行,而无需进入 .Net 库或点击我的断点。

  6. 当我在中断模式下查看断点时(在调用Invoke 行之后指令指针仍然在线),它是一个空心圆圈,并表示“当前不会命中此断点。没有为此加载任何符号文件。”

    这没有意义,因为符号已加载,如上所示。

如何进入 .Net 源代码,或通过其他方式执行此请求?此特定请求比某些请求要复杂一些,因为它需要证书(.pfx 文件)以及用户名和密码。

Hmmmmm...一个数据点是我删除的断点位于顶部的文件中:

// Decompiled with JetBrains decompiler
// Type: System.Web.Services.Protocols.SoapHttpClientProtocol
// Assembly: System.Web.Services, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
// MVID: A6D697F9-972E-41EC-820F-E59621A808B5
// Assembly location: C:\Windows\Microsoft.NET\Framework\v4.0.30319\System.Web.Services.dll

我突然觉得这可能是差异的来源。 JetBrains 是否会干扰我进入 .Net 源代码?

【问题讨论】:

  • 您确定 Microsoft 提供了特定的源文件吗?仅仅加载符号并不能保证一切。如果您怀疑 JetBrains 工具会干扰,请卸载它们并重试。
  • 我关闭了 ReSharper,是的,文件已被 ReSharper 分解。 Microsoft 仅提供方法标头。我确定 System.Web.Services 是 Microsoft。
  • 不要指向默认的 MS 符号服务器。使用参考服务器获取私有 PDBs + src 文件:referencesource.microsoft.com
  • @magicandre1981 好的,所以我关注了this,但还没有改进。
  • 你是否删除了符号缓存,否则 VS 不会获取新的 PDB?

标签: asp.net debugging visual-studio-2015 debug-symbols


【解决方案1】:

无法自动进入服务器。连接到服务器计算机“api.example.com”失败。 Visual Studio 2015 远程调试器 (MSVSMON.EXE) 似乎没有在远程计算机上运行。这可能是因为防火墙阻止了与远程计算机的通信。

所以实际上你只是在本地调试你的网络应用程序,但是你得到了远程调试错误/警告,对吗?

喜欢这里的文档:

https://msdn.microsoft.com/en-us/library/ms164726.aspx?f=255&MSPPError=-2147217396

如果您在本地调试时收到此消息,则可能是您的防病毒软件或第三方防火墙造成的。 Visual Studio 是 32 位应用程序,因此它使用 64 位版本的远程调试器来调试 64 位应用程序。这两个进程使用本地计算机内的本地网络进行通信。没有流量离开计算机,但第三方安全软件可能会阻止通信。

此外,您在讨论后使用正确的步骤来调试 .NET Framework 源代码:

但是如果你使用的是VS2015,你需要考虑一下是否为.NET框架更新了Reference源:

Cannot step into .NET framework source code

这里是用户的声音:

https://visualstudio.uservoice.com/forums/121579-visual-studio/suggestions/6886255-please-keep-the-reference-source-symbol-server-upd

【讨论】:

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