2016-12-16 35 views
2

我正在嘗試查看從調用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

回答

3

無法自動進入服務器。連接到服務器機器'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