大家好,我是本期的实验室研究员——【张广坡】。今天我将通过实验和完整的操作过程,向大家介绍【如何使用 Source Link 调试 Bootstrap Blazor 开源组件库】。接下来就让我们一起到实验室中一探究竟吧!
思路浅析
当我们使用第三方组件包的时候,尤其是遇到小问题的时候,特别想通过逐步调试进入到某个方法内部去看看其具体逻辑,这样做会给我们带来极大的便利,然后现实非常残酷,我们在一无源代码二无 PDB
的情况下想要实现逐步调试是不可能的任务。那么我们如何才能逐步调试第三方组件包呢?
通过本次实现,我们以第三方 Bootstrap Blazor
组件包为例,通过 Source Link
对此组件包进行逐步调试
前言
喜欢 Bootstrap Blazor 组件库的小伙伴们在日常开发过程中常常会遇到一些问题,非常想对 Bootstrap Blazor 组件库进行代码调试,是否有一种简单的办法让我们不需要项目引用 Bootstrap Blazor 的情况下就可以逐语句调试呢?答案就是 Source Link
什么是 Source Link
Source Link 是开发人员的一项生产力功能,它允许在编译过程中将有关程序集原始源代码的唯一信息嵌入到PDB中的一组软件包和规范。通过 SourceLink 添加到 PDB 文件中的元数据,和本地源代码文件、仓库内的代码文件建立了一个映射关系。因此 Visual Studio 调试时可以在需要时下载文件, 并为用户提供源代码调试, Microsoft库(例如.NET Core和Roslyn)都已启用Source Link。
开源地址:https://github.com/dotnet/sourcelink
我们本地开发时传统的调试模式还是通过引用源代码的方式进行代码调试,这使的我们很难调试没有源代码的第三方组件库。我们可以通过 Source Link 在无需源码的情况下获得极佳的调试体验。
配置 Visual Studio IDE 工具
步骤 1 - 配置 NuGet.org 符号源
默认情况下,NuGet.org 符号源未启用。为了让 SourceLink 正常工作,Visual Studio 需要能够下载这些源代码,因此我们必须先进行设置。
在 Visual Studio 中,转到 工具–>选项–>调试–>符号:
确保选中“NuGet.org 符号服务器”选项。
步骤 2 - 禁用 “仅我的代码”
接下来,我们需要转到 工具–>选项–>调试–>常规设置窗口并禁用“仅我的代码”选项:
步骤 3 - 启用源服务器和源链接支持
默认情况下,Visual Studio 中已启用 SourceLink 支持,但未启用源服务器支持。
再次,转到 工具->选项->调试->常规设置窗口并进行以下更改:
配置完毕,我们开始进入调试之旅
调试组件
新建工程引用 Bootstrap Blazor 组件包,后开始进行调试
命中断点后,按 Ctrl + Alt + U 快捷键,调出 Modules 窗口
从 Modules 窗口通过 Name 排序后可以看到我们要调试的 Bootstrap Blazor 组件包并未加载 PDB 文件,此时我们点击右键如图所示,选择 Load Symbols 根据每个人的网络情况会有一些延时,此时 Visual Studio 会从 Nuget.org 上下载组件包所需的 PDB 文件,下载完毕后,我们按 F11 (逐行调试)弹出对话框如下:
此时由于本地仅有刚刚下载的 PDB 文件,必须有源代码才可以进行逐行调试,所以弹出对话框请求下载源代码并调试,即可以进入到组件包内
设置命中断点
在我们的日常调试中更多的时候是对源码进行断点,程序运行时命中断点,我们进行调试。使用 Source Link 后我们能否设置源代码断点呢?当然是可以的,上面的方法是需要哪个源码就下载哪个源码,其实是非常不方便的。我们可以一次性把所有源码下载下来,自己根据需求来打开源码文件进行断点设置,如果所示操作,解压缩所有源码
设置解决方案显示其他项目
Source Link 支持
- Azure Repos / DevOps
- GitLab
- BitBucker
- Github
总结
本文以 Bootstrap Blazor
组件库为例讲解了如何通过 Source Link
进行第三方包调试,其他已发布 snupkg 的第三方组件包同样可以调试,包括微软的 asp.net core 框架相关代码
Bootstrap Blazor
Source Link
- https://docs.microsoft.com/en-us/dotnet/standard/library-guidance/sourcelink
- https://devblogs.microsoft.com/dotnet/producing-packages-with-source-link/