像JAVA一样流畅调试C#源代码?

起因

最近在研究ServiceScope的内一些内在运行逻辑,发现相关资料非常少,只有讲IOC相关的文章有说Core时代的官方依赖注入怎么使用。。遂决定还是要去看源代码。这部分源代码在Microsoft.Extensions.DependencyInjection库中,源代码位置在src/libraries[1]下。阅读了一点,发现内部解析服务的时候会来回倒腾,那看代码的方式去梳理就非常难受了。。

有没有一种可能, C#也能像JAVA那样非常顺畅的调试源代码呢?

效果

还真有! 话不说多,看图:

d1f56787ce2c3371860b8de462f492d9.png 7cd18db4a253833ac016b03ef37e6193.png

速度非常快,像调试本地代码一样.. 比反编译出来的流畅度不知道高到那里去了!

不知道官方的项目用了什么黑魔法,这里能直接拉到源代码(图里的外部源),而自己开发的项目做不到这一点。

具体步骤

这块其实官方有说明,但漏了几个关键点导致我卡了非常久,下面会进行详细说明:

  • PS1:以Windows VS为主,其它平台应该类似

  • PS2: 我主要是查看DI的构建逻辑,这块在不同版本差异不大, 所以我直接获取了6.0

1.打开官方仓库

官方仓库[2]

然后你拉取你想看的分支代码到本地,我主要是看

7a0633d7332b97b6358b1027043d278e.png

2.找到他们的构建说明

5307eb418e713951f290298787610c3b.png

3.安装对应平台的基础环境

cea8e66892fad5bdbc9a7b6479d1dfad.png

Windows VS平台是这样安装的:

55cdbc1545ec69c844f797de9821f8b8.png eb7d1d1b0d4454aea3fa8c20a5686163.png

然后点击查看详细信息,弹出的提示(无法安装XXXXX)可以忽略, 然后点修改即可。

这一步,官方的说法是你只需要安装更高版本的SDK即可,不用一一匹配。通常情况下开发的电脑上都会安装.NET Framework和.NET的几个SDK,一般都有。我自己是安装 .NET Framework 4.0目标包+4.7.2、目标包+NET 6.0的SDK。

[重点]4. 还原对应库

资源浏览器定位到runtime的根目录,记住这个build.cmd

5c6cc3fe7407bca063b8947096531b56.png

右键打开命令行或pwd,像这样执行:

1f41f317388989bc8c11d644a68c50f4.png

脚本会下载一个ps1文件然后自动执行,我们等待即可,他会自动还原我们需要的库,并且把依赖的基础包也一并还原好。

官方的代码结构中已经做好了nuget配置和输出目录, 我们已经不需要额外配置了,下一步进行编译。

5.生成对应库的dll文件

打开对应库的代码文件:

d39292340dacd8460a5cd87abefd5138.png

右键打开命令行或pwd,像这样执行:

13bfff6d5cf175ff1e40c2d42fa69f15.png

等待编译结束去这个目录下找东西

b58dcea45257bd28c79c10fd50744efd.png

每个库都会生成到artifacts下面,然后不同架构对应一个文件夹, 此时你就可以在你的测试项目中直接引用这个dll了, 愉快的调试吧。

[可选]6.生成依赖库文件

我这里是想调试Microsoft.Extensions.DependencyInjection,在Nuget上就能看到他还依赖一个抽象定义包Microsoft.Extensions.DependencyInjection.Abstractions,为了不在调试中卡壳,我把这个包一并如法炮制。

其它

  1. 在查阅资料时发现其实也可以用VS直接编译,但需要配置些东西,我没看明白就用这个办法了,我也不需要编译所有的。

  2. VS Code也可以,但我主要用VS就略过这部分了

  3. build.cmd脚本不加参数似乎是编译所有包, 我不需要就跳过这个了

参考资料

  1. 官方构建文档[3]

  2. 关键构建流程[4]

参考资料

[1]

src/libraries: https://github.com/dotnet/runtime/tree/release/6.0/src/libraries/Microsoft.Extensions.DependencyInjection

[2]

官方仓库: https://github.com/dotnet/runtime

[3]

官方构建文档: https://github.com/dotnet/runtime/blob/main/docs/workflow/requirements/windows-requirements.md

[4]

关键构建流程: https://github.com/dotnet/runtime/blob/main/docs/workflow/README.md

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值