美文网首页.NET
VSCode 调试进入 .Net Core 源码

VSCode 调试进入 .Net Core 源码

作者: 书上得来终觉浅 | 来源:发表于2018-08-22 15:08 被阅读22次

参考:Debugging into .NET Core 2.1

原理:利用与源码做了连接(source link)的pdb文件,反向找到源码文件,从而在调试进入源码。

pdb(program database)文件,中文翻译过来叫程序数据库文件,其实pdb文件还有一个别名叫做symbol文件,也就是符号文件,里面存有标识符,供调试器使用。调试器根据标识符找到对应的源码和行号,以及可执行文件中在设置断点的位置。

从.Net Core 2.1开始,.Net开源社区将.Net Core的pdb文件发布到Microsoft Symbol Server上,并做了Source Link,正是这样,所以我们可以在调试的时候进入.Net Core的源码,注意,这一功能仅在.Net Core 2.1以上版本有效,而且只能通过调试器进入源码。

  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的功能。

相关文章

网友评论

    本文标题:VSCode 调试进入 .Net Core 源码

    本文链接:https://www.haomeiwen.com/subject/pnhyiftx.html