热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

利用源链接技术调试ASP.NETCore源代码的方法与实践

本文详细探讨了通过源链接技术调试ASP.NETCore源代码的实用方法,旨在为开发者提供高效、准确的调试技巧,适用于学习和实际工作中遇到的相关问题。希望读者能从中获得有价值的参考和启发。

在Visual Studio 2017中可以通过符号以及源链接,非常方便对 ASP.NET Core 2.0中源代码进行调试。在这篇文章中,我们将重点介绍如何使用源链接对ASP.NET Core源进行调试。

什么是源链接?

和我一样,您可能已经注意到在编译代码时,会创建的PDB文件。这些文件保存了符号信息,这些信息可以选择用于支持对外部源代码的调试。某些类型的符号文件可能包含一些源代码或源代码的映射。

很长一段时间以前,Microsoft已经托管了符号服务器,它们保存Microsoft产品(如.NET Framework和ASP.NET Core)已发布的符号文件。Visual Studio支持动态下载符号。为此,您必须禁用“调试” -> “常规”选项中的“启用仅我的代码”选项。默认情况下,此选项在Visual Studio中是启用的。

有关符号、符号服务器等的更多信息,请参阅此MSDN链接。

源链接允许您在符号文件中嵌入被调用方法的名称和位置清单,它可以识别包含代码的文件以及可以从哪里检索文件。ASP.NET Core(不是.NET Core)现在支持源链接,并提供到GitHub上托管代码的链接。

启用和使用源链接

首先的要求是将Visual Studio 2017更新到最新的版本(15.3),该更新添加了源链接的支持。如果安装此项,在“调试” -> “常规”选项中,您将看到“启用源链接支持”。

除了确保“启用仅我的代码”禁用外,您还必须启用Microsoft符号服务器,在“调试” -> “符号”选项中,可以从符号文件位置列表中启用“Microsoft符号服务器”。

启用符号服务器时,您需要接受调试时可能引入的性能影响。

设置完成后,准备调试ASP.NET Core源代码。为了测试这个,我在Visual Studio中创建了一个默认的ASP.NET Core 2.0 MVC项目。然后我在HomeController上为Index方法添加了一个断点。然后开始调试应用程序。第一次调试时,您可能会看到这样的消息。

这是正在下载的符号文件,可能需要一段时间才能完成。

一旦应用程序运行到您代码断点处,您就可以导航到调用堆栈,以看到正在执行的所有外部ASP.NET代码。

如果您双击任何这些调用,编辑器将使用符号来确定该代码所在的框架位置。使用符号文件中的链接,Visual Studio将从GitHub下载源文件。当源链接需要下载源代码时,您会看到如下警告对话框:

您可以选择第一项“下载源并继续调试”选项,并继续使用该文件进行调试。您可以选择第二个选项,将下载该文件,并禁用下次文件下载的警告。

下载完源文件后,它将显示在您选择堆栈对应的位置。

您还可以在该文件中的其它位置添加自己的断点,然后在调试应用程序时将其设置为命中。即使我们停止调试并重新启动,这似乎仍然是有效的。

总结

在ASP.NET Core中调试外部源码非常容易。通过这个功能可以获得更多的价值,让我们可以调试ASP.NET Core源代码,了解内部工作方式。

到此这篇关于使用源链接对ASP.NET Core源代码进行调试的文章就介绍到这了。希望对大家的学习有所帮助,也希望大家多多支持。


推荐阅读
  • OBS (Open Broadcaster Software) 架构解析
    本文介绍 OBS(Open Broadcaster Software),一款专为直播设计的开源软件。文章将详细探讨其技术架构、核心组件及其开发环境要求。 ... [详细]
  • CentOS 7.6环境下Prometheus与Grafana的集成部署指南
    本文旨在提供一套详细的步骤,指导读者如何在CentOS 7.6操作系统上成功安装和配置Prometheus 2.17.1及Grafana 6.7.2-1,实现高效的数据监控与可视化。 ... [详细]
  • 本文探讨了如何通过预处理器开关选择不同的类实现,并解决在特定情况下遇到的链接器错误。 ... [详细]
  • 本文详细介绍了如何在PHP中进行数组删除、清空等操作,并提供了在Visual Studio Code中创建PHP文件的步骤。 ... [详细]
  • 版本控制工具——Git常用操作(下)
    本文由云+社区发表作者:工程师小熊摘要:上一集我们一起入门学习了git的基本概念和git常用的操作,包括提交和同步代码、使用分支、出现代码冲突的解决办法、紧急保存现场和恢复 ... [详细]
  • 本文探讨了C++编程中理解代码执行期间复杂度的挑战,特别是编译器在程序运行时生成额外指令以确保对象构造、内存管理、类型转换及临时对象创建的安全性。 ... [详细]
  • 本文详细介绍了get和set方法的作用及其在编程中的实现方式,同时探讨了点语法的使用场景。通过具体示例,解释了属性声明与合成存取方法的概念,并补充了相关操作的最佳实践。 ... [详细]
  • 本文介绍如何配置SecureCRT以正确显示Linux终端的颜色,并解决中文显示问题。通过简单的步骤设置,可以显著提升使用体验。 ... [详细]
  • cJinja:C++编写的轻量级HTML模板引擎
    本文介绍了cJinja,这是一个用C++编写的轻量级HTML模板解析库。它利用ejson来处理模板中的数据替换(即上下文),其语法与Django Jinja非常相似,功能强大且易于学习。 ... [详细]
  • 俗话说得好,“工欲善其事,必先利其器”。这句话不仅强调了工具的重要性,也提醒我们在任何项目开始前,准备合适的工具至关重要。本文将介绍几款C语言编程中常用的工具,帮助初学者更好地选择适合自己学习和工作的编程环境。 ... [详细]
  • 利用jstack进行死锁检测与线程堆栈分析
    本文介绍了如何使用jstack工具进行Java应用中的死锁检测及高CPU使用率线程的堆栈分析,帮助开发者快速定位并解决性能瓶颈。 ... [详细]
  • 本文深入探讨了面向切面编程(AOP)的概念及其在Spring框架中的应用。通过详细解释AOP的核心术语和实现机制,帮助读者理解如何利用AOP提高代码的可维护性和开发效率。 ... [详细]
  • 本文深入探讨了UNIX/Linux系统中的进程间通信(IPC)机制,包括消息传递、同步和共享内存等。详细介绍了管道(Pipe)、有名管道(FIFO)、Posix和System V消息队列、互斥锁与条件变量、读写锁、信号量以及共享内存的使用方法和应用场景。 ... [详细]
  • 本文深入探讨了 Delphi 中类对象成员的核心概念,包括 System 单元的基础知识、TObject 类的定义及其方法、TClass 的作用以及对象的消息处理机制。文章不仅解释了这些概念的基本原理,还提供了丰富的补充和专业解答,帮助读者全面理解 Delphi 的面向对象编程。 ... [详细]
  • Ubuntu GamePack:专为游戏爱好者打造的Linux发行版
    随着Linux系统在游戏领域的应用越来越广泛,许多Linux用户开始寻求在自己的系统上畅玩游戏的方法。UALinux,一家致力于推广GNU/Linux使用的乌克兰公司,推出了基于Ubuntu 16.04的Ubuntu GamePack,旨在为Linux用户提供一个游戏友好型的操作环境。 ... [详细]
author-avatar
广东蒗缦m莎
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有