前言:

  在我们日常开发过程中常常会使用到很多其他封装好的第三方中间件(NuGet依赖项)、类库或者是.NET框架中自带的库。但是当你想要对这些类库的方法设置断点调试,然后发现无法F11(逐语句)调试进源码中调用堆栈大部分显示为灰色,而不让您看到调用堆栈中较早发生的事情。如果可以设置断点并在NuGet依赖项或框架本身上使用调试器的所有功能,那么我们的源码调试体验和生产效率会提升非常的多。那么Source Link这项技术刚好就满足了我们对源码调试的意愿。

什么是Source Link:

  Source Link是一项技术,可让开发人员从NuGet调试.NET程序集的源代码。源链接在创建NuGet程序包时执行,并将源代码控制元数据嵌入程序集和程序包中。下载该程序包并在Visual Studio中启用了Source Link的开发人员可以进入其源代码。Source Link提供了源代码控制元数据,以创建出色的调试体验。

GitHub源码地址:

https://github.com/dotnet/sourcelink

Visual Studio配置启用Source Link:

拓展:符号文件即为.pdb的文件。

1、选择工具>选项>调试>符号,并确保已选中“ Microsoft符号服务器(.NET框架相关的库)和NuGet.org符号服务器”选项。为符号高速缓存指定目录是避免再次下载相同符号,提高源码查看效率。

2、在“工具” >“选项” >“调试” >“常规”中禁用【启用“仅我的代码”】,因为我们希望调试器尝试为解决方案之外的代码找到符号。验证是否已选中(默认情况下)。如果您想进入.NET Framework代码,则还需要选中。.NET Core不需要此功能。

Visual Studio启用Source Link调试:

    接下来以Newtonsoft.Json(一款.NET中开源的Json序列化和反序列化类库)为例。有时您想进入框架来查看发生了什么,特别是如果发生了意外的事情。使用Source Link,您可以像使用自己的代码一样进入框架方法,检查所有变量并设置断点。

未启用Source Link调试之前:

如果您在没有Source Link的情况下尝试了此操作,那么在按F11介入之前和之后,就会看到以下内容,无法进入类库中查看其源码。

启用Source Link调试:

调试器不会介入,是因为没有符号或源。一旦配置了Source Link,当我们进入时,可以通过F11直接调试Nuget依赖库的源码(因为第一次需要下载源文件到本地可能等待时间要久一些)。

指定下载对应文件的源代码进行调试:

.NET Core使用Source Link提高源代码调试体验和生产效率的更多相关文章

  1. 【译】使用 Source Link 提高调试效率

    有多少次你在调试器中追踪一个缺陷,通过代码,观察局部变量的值改变,当你碰壁--不是你所期待的值和你不能进入的方法,因为它来自类库或 .NET 框架本身:或者您设置了一个条件断点,等待检查某个值是如何设 ...

  2. 让你发布的nuget包支持源代码调试

    前情概要 在不久的从前(也还是要以年为单位哈), 我们如果需要调试第三方代码, 或者框架代码很麻烦. 需要配置symbols, 匹配原始代码路径等. 为此, MS推出了 Source Link 功能, ...

  3. ".NET Core Open Source Update"阅读笔记

    原文链接:.NET Core Open Source Update [Immo Landwerth发布于2015年1月28日] corefx在github上的forks已经超过1000. 从2014年 ...

  4. 利用ASP.NET MVC源代码调试你的应用程序[转]

    由于项目需要,最近学起asp.net mvc.昨天遇到ViewData和TempData他们之间的分别这样让我纠结的问题.有园友强烈建议我去看ASP.NET MVC的源代码.所以,我想到如何在调试AS ...

  5. Senparc.Weixin.MP SDK 微信公众平台开发教程(二十二):如何安装 Nuget(dll) 后使用项目源代码调试

    最近碰到开发者问:我使用 nuget 安装了 Senparc.Weixin SDK,但是有一些已经封装好的过程想要调试,我又不想直接附加源代码项目,这样就没有办法同步更新了,我应该怎么办? 这其实是一 ...

  6. 基于ivy的源代码调试方法

    项目PORJ_TEST是项目PROJ的测试项目.在它的ivy中引用了PROJ的jar包.由于PROJ正处于开发阶段,源代码更改频繁, 在运行PROJ_TEST中的测试时,需要进入PROJ的jar包内部 ...

  7. Docker容器环境下ASP.NET Core Web API应用程序的调试

    本文主要介绍通过Visual Studio 2015 Tools for Docker – Preview插件,在Docker容器环境下,对ASP.NET Core Web API应用程序进行调试.在 ...

  8. Arcgis Runtime 100.3开发实例源代码调试日志

    Arcgis Runtime 100.3开发实例源代码调试日志 路径: "D:\arcgis runtime1003\arcgis-runtime-samples-dotnet-master ...

  9. 渐进式 jpg 和 交错式 gif png 提高图片站体验

    渐进式 jpg 和 交错式 gif png 提高图片站体验= 渐进式的JPG比原始JPG还要小!! 让图片性感的露给你看~google picasa 和 smashing magazine 都有用到搞 ...

随机推荐

  1. Web服务器-正则表达式-整理+复习(3.1.1)

    @ 目录 1.常用api 2.例子 3.正则表达式模式 关于作者 参考文章 1.常用api re.match(pattern, string, flags=0) pattern 匹配的正则表达式 st ...

  2. matplotlib的学习3-figure图像

    import matplotlib.pyplot as plt import numpy as np # matplotlib 的 figure 就是一个 单独的 figure 小窗口, 小窗口里面还 ...

  3. 彻底理解Spring如何解决循环依赖

    Spring bean生命周期 可以简化为以下5步. 1.构建BeanDefinition 2.实例化 Instantiation 3.属性赋值 Populate 4.初始化 Initializati ...

  4. 第一天——编程语言与python

    ------------恢复内容开始------------ what's the python? python是一门编程语言,编程语言就是人用来和计算机沟通的语言,语言就是人与人,人与事物进行沟通的 ...

  5. JDK8新特性详解(一)

    虽然JDK8已经出来了N久,其新特性也在日益改变着我们的编码习惯和风格.虽然有些新特性用起来很顺手,但是总是傻傻分不清到底是哪个版本的.趁今天有时间,我们就来总结一下,JDK8有哪些能提升我们开发效率 ...

  6. python之列表操作的几个函数

    Python中的列表是可变的,这是它却别于元组和字符串最重要的特点,元组和字符串的元素不可修改.列举一些常用的列表操作的函数和方法. 1,list.append(x),将x追加到列表list末尾: 1 ...

  7. 痞子衡嵌入式:恩智浦i.MX RT1xxx系列MCU硬件那些事(2.6)- 串行NOR Flash下载算法(MCUXpresso IDE篇)

    大家好,我是痞子衡,是正经搞技术的痞子.今天痞子衡给大家介绍的是MCUXpresso IDE开发环境下i.MXRT的串行NOR Flash下载算法设计. 在i.MXRT硬件那些事系列之<在串行N ...

  8. 安装简易OpenShift单节点并配置DNS泛域名

    1 楔子 公司有个项目部署在 OpenShift 容器云平台上,出现问题较多,于是萌生在公司环境搭建现场仿真环境,由于资源没有生产环境多,就使用单节点简单模拟下 本文主要内容包括以下: 使用 Dnsm ...

  9. 输入xls格式 输出 xls

    package com.cn.peitest.excel.word; import java.io.File; import java.io.FileInputStream; import java. ...

  10. 【探索之路】机器人篇(4)-根据3D文件来优化自己的机器人模型

    此章节不是必须做的!!!! 因为我已经用solidworks画了机器人的3D模型,那我就直接导入已经画好的三维模型. 如果大家没有画也是可以直接使用上一章节我们已经构建的机器人模型.我这里只是一个对显 ...