簡體   English   中英

如何在Visual Studio 2017中調試.NET 4.6框架源代碼?

[英]How do I debug .NET 4.6 framework source code in Visual Studio 2017?

這是我嘗試過的:

在Visual Studio 2017中創建了一個新的控制台應用程序(.NET Framework)。

添加了以下代碼:

static void Main(string[] args)
{
    new Dictionary<int, int>().TryGetValue(3, out int x); //I want to step into TryGetValue() (this is just an example)
}

配置此處列出的設置: https//blogs.msdn.microsoft.com/sburke/2008/01/16/configuring-visual-studio-to-debug-net-framework-source-code/

已確認的符號將加載到“模塊”窗口中:

mscorlib.dll已加載符號。 4.6.1586.0構建者:NETFXREL2

試過:“踏入(F11)”

嘗試:“步入特定”| “System.Collections.Generic.Dictionary.TryGetValue”

兩者都只是跨過了界限。

我嘗試使用以下詳細信息配置VS: http//www.symbolsource.org/Public/Home/VisualStudio

同樣的結果,調試器跨越了這一行。

我在這里看了答案: https//stackoverflow.com/a/12432029/297451

但是這個版本似乎不是一個安全更新,搜索“site:support.microsoft.com/kb 4.6.1586.0”沒有產生任何結果。

我究竟做錯了什么?

這是答案,感謝Hans Passant。 請注意,此解決方案提出了其他問題。

  1. 確保https://referencesource.microsoft.com/包含您正在調試的確切版本。

  2. 按照此處的說明配置Visual Studio: https//referencesource.microsoft.com/setup.html

    • 解開“啟用我的代碼”
    • 勾選“啟用.NET Framework源步進”(這應該是唯一需要的步驟)
    • 勾選“啟用源服務器支持”
    • 取消“要求源文件與原始版本完全匹配”
  3. 確認符號已加載到“模塊”窗口中,並包含源索引。

    • 如何判斷是否包含源索引? 模塊窗口未指定PDB是否已剝離源信息。

通過提供有用的錯誤消息而不是靜默失敗,Microsoft可以使此過程更加健壯。

使用JetBrains dotPeek中的符號服務器功能 在努力使標准功能發揮作用之后,對我來說就像一個魅力:

  1. 運行dotPeek並轉到工具>選項...>符號服務器。
  2. 確保選中“所有程序集”並將本地符號服務器URL復制到剪貼板。 通過在“工具”菜單中單擊它來啟動dotPeek符號服務器。
  3. 在Visual Studio中,轉到“工具”>“選項...”>“調試”>“符號”,然后將dotPeek服務器URL添加到列表中。 將dotPeek符號服務器移動到盡可能高的列表中,並取消選中列表中的所有其他符號服務器( 特別是,不得選擇“Microsoft Symbol Servers”和“NuGet.org Symbol Server” )。
  4. 開始調試 - 當你試圖進入Framework源代碼時,你會看到dotPeek正在為你做一些反編譯程序的工作,然后你會進入它的源代碼。

如果這不起作用,可能是因為Visual Studio以前從Microsoft / NuGet下載了有問題的程序集的“錯誤”符號,並且正在使用它們而不是詢問dotPeek。 要檢查這一點,請開始調試並在模塊列表中找到相關的程序集(Debug> Windows> Modules) - 在該程序集的“Symbol File”下顯示的路徑中刪除PDB文件 ,然后重新啟動調試,dotPeek應該啟動。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM