已加载符号,但仍无法步入.Net源
我正在尝试查看从调用Internet连接的Web API返回的原始响应消息。调用代码如下所示:已加载符号,但仍无法步入.Net源
object[] results = this.Invoke("MethodName", new object[] { requestObject });
的问题是,在调试时,该results
变量已经出现完全反序列化,例如日期属性我很感兴趣,已经是一个DateTime
类型。
所以我做了以下内容:
熄灭 “启用仅我的代码”。
打开“启用.Net Framework源码步进”。
-
启用符号加载和确保了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
-
我下降断点以下方法的内部开始在线路的
SoapHttpClientProtocol.cs
(一个由我的客户端代码调用)163:protected object[] Invoke(string methodName, object[] parameters)
-
我开始调试项目,并用我的UI触发发出请求的代码。当我到达
Invoke
线以上,按F11,它会尝试远程调试,并进入远程服务器:微软的Visual Studio
无法自动步入服务器。连接到服务器机器'api.example.com'失败。 Visual Studio 2015远程调试器(MSVSMON.EXE)似乎不在远程计算机上运行。这可能是因为防火墙阻止了与远程计算机的通信。有关配置远程调试的帮助,请参阅帮助。
注意:我不想做远程调试,我只想进入.Net代码。
点击确定后,它会进入我的客户端代码中的下一行,无需进入.Net库或点击我的断点。
-
当我看到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源代码?
无法自动进入服务器。连接到服务器机器'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源代码:
但是如果你使用VS2015,你需要考虑一下是否参考源已更新为.NET Framework:
Cannot step into .NET framework source code
用户的声音在这里:
是否确定特定的源文件是由Microsoft提供的?仅仅加载符号并不能保证一切。如果您怀疑JetBrains工具存在干扰,请将其卸载并重试。 –
我关掉了ReSharper,是的,文件被ReSharper分解了。 Microsoft只提供方法头文件。但我确定System.Web.Services是微软。 – ErikE
不指向默认的MS符号服务器。使用参考服务器来获取私人PDBs + src文件:https://referencesource.microsoft.com/ – magicandre1981