VSCode 調試進入 .Net Core 源碼

參考:Debugging into .NET Core 2.1git

原理:利用與源碼作了鏈接(source link)的pdb文件,反向找到源碼文件,從而在調試進入源碼。github

pdb(program database)文件,中文翻譯過來叫程序數據庫文件,其實pdb文件還有一個別名叫作symbol文件,也就是符號文件,裏面存有標識符,供調試器使用。調試器根據標識符找到對應的源碼和行號,以及可執行文件中在設置斷點的位置。數據庫

從.Net Core 2.1開始,.Net開源社區將.Net Core的pdb文件發佈到Microsoft Symbol Server上,並作了Source Link,正是這樣,因此咱們能夠在調試的時候進入.Net Core的源碼,注意,這一功能僅在.Net Core 2.1以上版本有效,並且只能經過調試器進入源碼。json

  1. 在 VS Code 中升級C# for Visual Studio Code (powered by OmniSharp) 插件到最新版本,目前個人是1.15版本。
  2. 確保本機安裝了.Net Core 2.1 版本及以上。
  3. 項目是基於.Net Core 2.1版本及以上的,可在.csproj文件中查看 <TargetFramework> 標籤。

有了以上3個先決條件後,須要在vscode的launch.json配置中添加以下字段框架

//關閉 「僅個人代碼」 項,這樣
    "justMyCode": false,
    "symbolOptions": {
        //從Microsoft Symbol Server(https://msdl.microsoft.com/download/symbols)上查找並下載symbol文件
        "searchMicrosoftSymbolServer": true
    },
    //取消jit編譯器的優化(默認是false)
    "suppressJITOptimizations": true,
    "env": {
        //這個環境變量告訴.Net RunTime 忽略已經提早編譯的源碼.Net框架程序集,用JIT編譯器編譯的程序集代替。
        "COMPlus_ZapDisable": "1"
    }

有了上面的配置,當你調試時,調試器就會在Microsoft Symbol Server上自動下載symbol文件和對應的源碼(不是全部的,僅僅是當前調試用到的),但下載了咱們須要的symbol文件後,能夠註釋掉 searchMicrosoftSymbolServer:true 這一項,這樣就能夠再也不Symbol Server上去查找symbol文件了。優化

suppressJITOptimzatioins和COMPlus_ZapDisable兩個選項組合起來使用,才讓咱們可以將未優化的源碼載入調試器中,從而達到debugging into Source的功能。插件