天天看点

Visual Studio 调试系列9 调试器提示和技巧

系列目录     【已更新最新开发文章,点击查看详细】

01 固定数据提示

如果你在调试时,经常将鼠标悬停在数据提示上,就可能想固定变量的数据提示,方便自己随时查看。 即使在重新启动后,固定的变量也能保持不动。 要固定数据提示,请在鼠标悬停其上时单击固定图标。 你可以固定多个变量。

Visual Studio 调试系列9 调试器提示和技巧

02 编辑代码并继续调试 (C#,VB, C++)

在 Visual Studio 支持的大多数语言中,你都可以在调试会话的过程中编辑代码,然后继续调试。 要使用此功能,请先在调试器中暂停,用鼠标点击进入代码,进行编辑,然后按 F5、F10 或 F11 键继续调试。

Visual Studio 调试系列9 调试器提示和技巧

有关功能使用和功能限制的详细信息,请参阅编辑并继续。

03 调试难以再现的问题

如果在应用中重新实现特定状态很困难或很费时,可以考虑使用条件断点。 你可以使用条件断点并对其加以筛选,以免破坏应用代码,直到应用进入所需的状态(例如,变量正在存储错误数据的状态)。 你可以使用表达式、筛选器、命中次数等来设置条件。

创建条件断点

  1. 右键单击断点图标 (红色的球),然后选择条件。
  2. 在断点设置窗口中,键入一个表达式。
    Visual Studio 调试系列9 调试器提示和技巧
  3. 如果你对另一种类型的条件感兴趣,请在断点设置对话框中选择筛选器,而不是条件表达式,然后按照筛选器的提示操作。

04 配置要在调试器中显示的数据

有关C#,Visual Basic 和C++(C++仅 /CLI 代码),可以让调试程序要使用下列选项显示的信息DebuggerDisplay属性。 有关C++代码中,可以执行相同的 using Natvis 可视化。

05 更改执行流

让调试器暂停在某行代码上,用鼠标抓住左侧的黄色箭头指针。 将黄色箭头指针移动到代码执行路径中的其他点上。 然后通过 F5 键或步骤命令继续运行应用。

Visual Studio 调试系列9 调试器提示和技巧

通过更改执行流,你可以进行测试不同代码执行路径或重新运行代码等操作,而无需重启调试器。

06 跟踪范围外的对象 (C#、 Visual Basic)

通过调试器窗口(如监视窗口)可以轻松查看变量。 但是,如果变量超出了监视窗口的范围,你可能会注意到它变成了灰色。在某些应用场景中,如果变量超出范围,变量的值甚至可能会发生变化,因此你可能需要密切关注它(例如,变量可能会被当做垃圾回收掉)。你可以在监视窗口中为该变量创建一个对象 ID 来跟踪这个变量。

创建对象 ID

  1. 在要跟踪的变量附近设置一个断点。
  2. 启动调试器 (F5),并在断点处停止。
  3. 在局部变量窗口(调试 > 窗口 > 局部变量)中找到该变量,右键单击该变量,然后选择创建对象 ID。
    Visual Studio 调试系列9 调试器提示和技巧
  4. 应该会在“局部变量” $ 窗口中看到 $ 窗口中设置断点来中断调用函数返回到的指令或行处的执行。 此变量是对象 id。
  5. 右键单击对象 ID 变量,然后选择添加监视。

有关详细信息,请参阅创建的对象 ID。

07 查看函数的返回值

要查看函数的返回值,请在逐步执行代码时,查看自动窗口中显示的函数。 要查看函数的返回值,请确保你关注的函数已执行完毕(如果函数的调用目前处于停止状态,请按一下 F10 键)。 如果该窗口已关闭,请通过调试 > 窗口 > 自动窗口打开自动窗口。

Visual Studio 调试系列9 调试器提示和技巧

此外,还可以在即时窗口中输入函数来查看返回值。 (通过调试 > 窗口 > 即时打开该窗口。)

Visual Studio 调试系列9 调试器提示和技巧

此外,还可以在监视和即时窗口中使用伪变量,如 

$ReturnValue

08 检查可视化工具中的字符串

在使用字符串时,如果能看到完整的、带格式的字符串会很有帮助。 要查看纯文本、XML、HTML 或 JSON 字符串,请将鼠标悬停在包含字符串值的变量上,然后单击放大镜图标

Visual Studio 调试系列9 调试器提示和技巧
Visual Studio 调试系列9 调试器提示和技巧

字符串可视化工具可以帮你确定字符串的格式是否正确,具体取决于字符串的类型。 例如,如果值字段为空,表明可视化工具类型未识别出该字符串。 有关详细信息,请参阅字符串可视化工具对话框。

Visual Studio 调试系列9 调试器提示和技巧

对于几个其他类型如调试器窗口中显示的数据集和 DataTable 对象,还可以打开内置的可视化工具。

09 在已处理的异常处中断代码

调试器会在未经处理的异常处中断代码。 但是,已处理的异常(例如 

try/catch

 块内发生的异常)也可能会造成错误,可能需要进一步调查。 可以将调试器配置为在已处理的异常处中断代码,方法是配置异常设置对话框中的选项。 要打开这个对话框,请选择调试 > 窗口 > 异常设置。

通过异常设置对话框,你可以让调试器在特定异常处中断代码。 在下图中,调试器会在发生 

System.NullReferenceException

 时中断代码。 有关详细信息,请参阅管理异常。

Visual Studio 调试系列9 调试器提示和技巧

10 调试死锁和争用条件

如果需要调试的问题对于多线程应用程序很常见,在调试时查看线程的位置,通常会有所帮助。 可使用源中显示线程按钮轻松完成此操作。

Visual Studio 调试系列9 调试器提示和技巧

在源代码中显示线程

  1. 调试时,单击源中显示线程按钮
    Visual Studio 调试系列9 调试器提示和技巧
    中调试工具栏。
  2. 查看窗口左侧的滚动条。 在这一行,你可以看到线程标记图标
    Visual Studio 调试系列9 调试器提示和技巧

     ,类似于两根细线。线程标记指示线程在此位置停止。

    注意,线程标记可能被断点不完全遮挡。

  3. 将指针悬停在线程标记上。 屏幕上将显示数据提示。 数据提示将告诉你每个已停止线程的名称和线程 ID。

    你还可以查看中的线程的位置并行堆栈窗口。

11 检查 web 服务和网络资源 (UWP) 的有效负载

在 UWP 应用中,你可以分析使用 

Windows.Web.Http

 API执行的网络操作。 可以使用此工具来帮助调试 web 服务和网络资源。 若要使用该工具,请选择调试 > 性能探查器。 选择网络,然后选择启动。 在应用中,浏览使用 

Windows.Web.Http

 的应用场景,然后选择 停止收集 生成报表。

Visual Studio 调试系列9 调试器提示和技巧

在摘要视图中选择一个操作,查看更多详细信息。

Visual Studio 调试系列9 调试器提示和技巧

有关详细信息,请参阅网络使用情况。

12 将调试器附加到您的应用程序

若要附加到正在运行的应用,调试器将加载为想要调试的应用的相同内部版本生成的符号 (.pdb) 文件。 在某些情况下,了解符号文件的一些知识非常有用。 你可在模块窗口中检查 Visual Studio 如何加载符号文件。

在调试时,通过选择调试 > 窗口 > 模块 打开模块窗口。 模块窗口可以告诉你,调试器将哪些模块视为用户代码或我的代码,以及符号加载模块的状态。 在大多数情况下,调试器会自动为用户代码查找符号文件,但如果你想要单步跟踪 (或调试).NET framework 代码、系统代码或第三方库代码,必须执行其他步骤获取正确的符号文件。

Visual Studio 调试系列9 调试器提示和技巧

你可以直接在模块窗口中右键单击并选择加载符号来加载符号信息。

有时,应用开发人员发布的应用不包含匹配的符号文件 (为了减少占用的空间),但会为内部版本保留一份匹配的符号文件,用于以后调试发布版本。

了解如何调试器如何区分用户代码,请参阅仅我的代码。 若要了解有关符号文件的详细信息,请参阅在 Visual Studio 调试器中指定符号 (.pdb) 和源文件。

成在管理,败在经验;嬴在选择,输在不学!  贵在坚持!

欢迎关注作者头条号 张传宁IT讲堂,获取更多IT文章、视频等优质内容。

Visual Studio 调试系列9 调试器提示和技巧

个人作品

1、BIMFace.Community.SDK.NET

     开源地址:https://gitee.com/NAlps/BIMFace.SDK

     系列博客:https://www.cnblogs.com/SavionZhang/p/11424431.html

     系列视频:https://www.cnblogs.com/SavionZhang/p/14258393.html

2、ZCN.NET.Common

     开源地址:https://gitee.com/NAlps/zcn.net.common

Visual Studio 调试系列9 调试器提示和技巧

技术栈

 1、Visual Studio、.C#/.NET、.NET Core、MVC、Web API、RESTful API、gRPC、SignalR、Python

 2、jQuery、Vue.js、Bootstrap

 3、数据库:SQLServer、MySQL、PostgreSQL、Oracle、SQLite、Redis、MongoDB、ElasticSearch、TiDB、达梦DM、人大金仓、 神通、南大通用 GBase、华为 GaussDB 、腾讯 TDSQL 、阿里 PolarDB、蚂蚁金服 OceanBase、东软 OpenBASE、浪潮云溪数据库 ZNBase

 4、ORM:Dapper、Entity Framework、FreeSql、SqlSugar、分库分表、读写分离

 5、架构:领域驱动设计 DDD、ABP

 6、环境:跨平台、Windows、Linux(CentOS、麒麟、统信UOS、深度Linux)、maxOS、IIS、Nginx、Apach

 7、移动App:Android、IOS、HarmonyOS、微信、小程序、快应用、Xamarin、uni-app、MUI、Flutter、Framework7、Cordova、Ionic、React Native、Taro、NutUI、Smobiler

 云原生、微服务、Docker、CI/CD、DevOps、K8S;

 Dapr、RabbitMQ、Kafka、分布式、大数据、高并发、负载均衡、中间件、RPC、ELK;

 .NET + Docker + jenkins + Github + Harbor + K8S;

出处:www.cnblogs.com/SavionZhang

作者:张传宁   微软MCP、系统架构设计师、系统集成项目管理工程师、科技部创新工程师。

          专注于微软.NET技术(.NET Core、Web、MVC、WinForm、WPF)、通用权限管理系统、工作流引擎、自动化项目(代码)生成器、SOA 、DDD、 云原生(Docker、微服务、DevOps、CI/CD);PDF、CAD、BIM 审图等研究与应用。

          多次参与电子政务、图书教育、生产制造等企业级大型项目研发与管理工作。

          熟悉中小企业软件开发过程:需求分析、架构设计、编码测试、实施部署、项目管理。通过技术与管理帮助中小企业快速化实现互联网技术全流程解决方案。

本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。

如有问题,可以通过邮件[email protected]联系。共同交流、互相学习。

如果您觉得文章对您有帮助,请点击文章右下角【推荐】。您的鼓励是作者持续创作的最大动力!