如何以超快的方式调试?

简介: 如何以超快的方式调试?

起因

最近在研究ServiceScope的内一些内在运行逻辑,发现相关资料非常少,只有讲IOC相关的文章有说Core时代的官方依赖注入怎么使用。。遂决定还是要去看源代码。这部分源代码在Microsoft.Extensions.DependencyInjection库中,源代码位置在src/libraries下。阅读了一点,发现内部解析服务的时候会来回倒腾,那看代码的方式去梳理就非常难受了。。有没有一种可能, C#也能像JAVA那样非常顺畅的调试源代码呢?效果还真有! 话不说多,看图:速度非常快,像调试本地代码一样.. 比反编译出来的流畅度不知道高到那里去了!不知道官方的项目用了什么黑魔法,这里能直接拉到源代码(图里的外部源),而自己开发的项目做不到这一点。具体步骤这块其实官方有说明,但漏了几个关键点导致我卡了非常久,下面会进行详细说明:

PS1:以Windows VS为主,其它平台应该类似
PS2: 我主要是查看DI的构建逻辑,这块在不同版本差异不大, 所以我直接获取了6.0

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

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

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

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

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

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

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

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

1.打开官方仓库
官方仓库[2]

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

2.找到他们的构建说明

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

Windows VS平台是这样安装的:

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

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

[重点]4. 还原对应库
资源浏览器定位到runtime的根目录,记住这个build.cmd

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

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

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

5.生成对应库的dll文件
打开对应库的代码文件:

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

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

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

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

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

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

build.cmd脚本不加参数似乎是编译所有包, 我不需要就跳过这个了1.打开官方仓库官方仓库然后你拉取你想看的分支代码到本地,我主要是看2.找到他们的构建说明3.安装对应平台的基础环境Windows VS平台是这样安装的:然后点击查看详细信息,弹出的提示(无法安装XXXXX)可以忽略, 然后点修改即可。这一步,官方的说法是你只需要安装更高版本的SDK即可,不用一一匹配。通常情况下开发的电脑上都会安装.NET Framework和.NET的几个SDK,一般都有。我自己是安装 .NET Framework 4.0目标包+4.7.2、目标包+NET 6.0的SDK。[重点]4. 还原对应库资源浏览器定位到runtime的根目录,记住这个build.cmd右键打开命令行或pwd,像这样执行:脚本会下载一个ps1文件然后自动执行,我们等待即可,他会自动还原我们需要的库,并且把依赖的基础包也一并还原好。官方的代码结构中已经做好了nuget配置和输出目录, 我们已经不需要额外配置了,下一步进行编译。5.生成对应库的dll文件打开对应库的代码文件:右键打开命令行或pwd,像这样执行:等待编译结束去这个目录下找东西每个库都会生成到artifacts下面,然后不同架构对应一个文件夹, 此时你就可以在你的测试项目中直接引用这个dll了, 愉快的调试吧。[可选]6.生成依赖库文件我这里是想调试Microsoft.Extensions.DependencyInjection,在Nuget上就能看到他还依赖一个抽象定义包Microsoft.Extensions.DependencyInjection.Abstractions,为了不在调试中卡壳,我把这个包一并如法炮制。其它在查阅资料时发现其实也可以用VS直接编译,但需要配置些东西,我没看明白就用这个办法了,我也不需要编译所有的。VS Code也可以,但我主要用VS就略过这部分了build.cmd脚本不加参数似乎是编译所有包, 我不需要就跳过这个了

相关文章
|
前端开发 Java
前端基础 - 常用调试方式
前端基础 - 常用调试方式
75 0
|
1月前
|
PHP 数据库 开发者
PHPStorm的调试功能可以调试哪些类型的问题?
总之,PHPStorm 的调试功能非常强大,几乎可以应对 PHP 开发中遇到的各种类型问题,为开发者提供了有力的支持,提高开发效率和代码质量。
93 48
|
7月前
|
存储 编译器 程序员
【调试方法】基于vs环境下的实用调试技巧
【调试方法】基于vs环境下的实用调试技巧
|
7月前
|
Web App开发 移动开发 前端开发
2023前端调试技巧
2023前端调试技巧
|
7月前
|
C#
C#调试与测试 | DebuggerDisplay使用技巧
DebuggerDisplay可以让你在调试器中显示你自己定义的字符串,代替默认的显示方式。换句话说,它可以让你在调试器中更加方便地查看对象的信息。 当你在调试一个复杂的对象时,往往会发现默认的显示方式不能满足你的需求。这时,你可以使用 DebuggerDisplay 来自定义你想要显示的信息。例如,你可以将一些比较重要的属性或字段的值显示在调试器中,这样你就可以更加方便地了解对象的状态。另外,如果你使用了一些自定义的类,这些类可能没有默认的 ToString 方法,调试器默认的显示方式就会非常简陋,这时你可以使用 DebuggerDisplay 来定义一个更加友好的显示方式。
76 0
|
C++ 索引
再分享 5 个 vs 调试技巧
再分享 5 个 vs 调试技巧
|
程序员 C语言
选择合适的方法进行API接口调试
随着互联网的快速发展,API(Application Programming Interface)接口在软件开发中扮演着重要的角色。调试API接口是确保系统正常运行的关键步骤之一。本文将介绍如何选择适合的方法进行API接口调试,以确保开发过程的高效进行和应用程序的质量。