我正在嘗試查看從調用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源代碼?
是否確定特定的源文件是由Microsoft提供的?僅僅加載符號並不能保證一切。如果您懷疑JetBrains工具存在干擾,請將其卸載並重試。 –
我關掉了ReSharper,是的,文件被ReSharper分解了。 Microsoft只提供方法頭文件。但我確定System.Web.Services是微軟。 – ErikE
不指向默認的MS符號服務器。使用參考服務器來獲取私人PDBs + src文件:https://referencesource.microsoft.com/ – magicandre1981