【发布时间】:2016-12-16 22:20:17
【问题描述】:
我正在尝试查看从调用连接到 Internet 的 Web API 时返回的原始响应消息。调用代码如下:
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 时,它会尝试远程调试并进入远程服务器:微软视觉工作室
无法自动进入服务器。连接到服务器计算机“api.example.com”失败。 Visual Studio 2015 远程调试器 (MSVSMON.EXE) 似乎没有在远程计算机上运行。这可能是因为防火墙阻止了与远程计算机的通信。有关配置远程调试的帮助,请参阅帮助。
注意:我不想做远程调试,我只想进入.Net代码。
点击 OK 后,它会转到我的客户端代码中的下一行,而无需进入 .Net 库或点击我的断点。
-
当我在中断模式下查看断点时(在调用
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