符号已加载,但仍无法进入.Net源

时间:2016-12-16 22:20:18

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

我正在尝试查看从对互联网连接的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时,它会尝试远程调试并进入远程服务器:

      

    Microsoft Visual Studio

         

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

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

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

  6. 当我在休息模式下查看断点时(指令指针在调用Invoke行后仍然在线),它是一个空心圆圈,并说“#34;此断点当前不会被命中。没有为此文档加载任何符号。"

    如上所述,加载符号时没有任何意义。

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

    嗯...一个数据点是我丢弃的断点位于顶部的文件中:

    // 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源?

1 个答案:

答案 0 :(得分:3)

  
    

无法自动进入服务器。连接到服务器' 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源代码:

enter image description here

但是如果你使用VS2015,你需要考虑是否已经为.NET框架更新了参考源:

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