如何以超快的方式调试?

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

起因

最近在研究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脚本不加参数似乎是编译所有包, 我不需要就跳过这个了

相关文章
|
设计模式 缓存 前端开发
一款清新优雅的中后台模板,内置丰富可配置的主题(强烈推荐)
Soybean Admin 是一个基于 Vue3、Vite3、TypeScript、NaiveUI、Pinia 和 UnoCSS 的清新优雅的中后台模版,它使用了最新的前端技术栈,内置丰富的主题配置,有着极高的代码规范,基于 mock 实现的动态权限路由,开箱即用的中后台前端解决方案,也可用于学习参考。
|
8月前
|
数据采集 自然语言处理 API
集运物流企业构建反向海淘系统的完整投入分析,涵盖技术、物流、合规、运营四大核心模块的详细成本与资源
集运物流企业构建反向海淘系统需投入技术、物流、合规、运营四大模块资源。技术方面涵盖用户端与商家端开发、API对接及智能清关系统,首年成本约150万至800万人民币。物流基建包括国内集运仓、国际运输和海外派送,涉及浮动成本。合规投入涉及跨境资质、国际认证及数据安全。运营阶段注重市场推广、客服体系及品牌建设。总初期启动成本150万至800万,持续运营年成本100万至500万。成功要素包括差异化服务、技术护城河和本地化运营。
|
12月前
|
存储 前端开发 JavaScript
前端的全栈之路Meteor篇(四):RPC方法注册及调用-更轻量的服务接口提供方式
RPC机制通过前后端的`callAsync`方法实现了高效的数据交互。后端通过`Meteor.methods()`注册方法,支持异步操作;前端使用`callAsync`调用后端方法,代码更简洁、易读。本文详细介绍了Methods注册机制、异步支持及最佳实践。
233 3
|
安全 Python
Python量化炒股的获取数据函数—get_industry()
Python量化炒股的获取数据函数—get_industry()
241 4
|
6月前
|
数据安全/隐私保护
YashanDB安装前依赖项准备
本文来自YashanDB官网,介绍了安装和运行YashanDB前所需的依赖项准备。需在所有服务器环境中配置特定版本的动态库,包括openssl、gmssl、lz4、zlib、zstd等,以确保加密、网络通信及数据压缩等功能正常运作,同时需要安装monit用于守护进程管理。请参考官方文档获取详细信息和最新要求。
YashanDB安装前依赖项准备
|
消息中间件 存储 分布式计算
Kafka 简单介绍
Kafka 简单介绍
|
Java 应用服务中间件 Linux
Linux(CentOS7)设置Tomcat为开机启动项
Linux(CentOS7)设置Tomcat为开机启动项
386 0
|
编译器 C语言 开发者
掌握指针和数组:经典笔试题攻略(万字详解)(上)
掌握指针和数组:经典笔试题攻略(万字详解)(上)
143 0
|
前端开发 Java 应用服务中间件
Springboot解决跨域问题方案总结(包括Nginx,Gateway网关等)
Springboot解决跨域问题方案总结(包括Nginx,Gateway网关等)
实战案例|K折交叉验证与GridSearch网格搜索
大家好,我是志斌~ 今天跟大家分享一下如何用GridSearch网格搜索和K折交叉认证对决策树模型进行参数调优。
714 0
实战案例|K折交叉验证与GridSearch网格搜索