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

问题描述:

我正在尝试查看从调用Internet连接的Web API返回的原始响应消息。调用代码如下所示:已加载符号,但仍无法步入.Net源

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,它会尝试远程调试,并进入远程服务器:

    微软的Visual Studio

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

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

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

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

    这是没有意义的,因为符号已被加载,如上所述。

如何进入.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源代码?

+0

是否确定特定的源文件是由Microsoft提供的?仅仅加载符号并不能保证一切。如果您怀疑JetBrains工具存在干扰,请将其卸载并重试。 –

+0

我关掉了ReSharper,是的,文件被ReSharper分解了。 Microsoft只提供方法头文件。但我确定System.Web.Services是微软。 – ErikE

+0

不指向默认的MS符号服务器。使用参考服务器来获取私人PDBs + src文件:https://referencesource.microsoft.com/ – magicandre1981

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

所以实际上你只是调试Web应用程序在本地,但你有远程调试错误/警告,对吗?

这里这个文件一样:

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 Framework:

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