前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Visual Studio 调试系列9 调试器提示和技巧

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

作者头像
张传宁IT讲堂
发布2019-09-17 18:16:25
3.2K0
发布2019-09-17 18:16:25
举报
文章被收录于专栏:.NET企业级解决方案应用与咨询

01 固定数据提示

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

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

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

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

03 调试难以再现的问题

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

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

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

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

05 更改执行流

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

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

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

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

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

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

07 查看函数的返回值

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

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

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

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

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

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

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

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

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

通过异常设置对话框,你可以让调试器在特定异常处中断代码。 在下图中,调试器会在发生 System.NullReferenceException 时中断代码。 有关详细信息,请参阅管理异常

10 调试死锁和争用条件

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

在源代码中显示线程
  1. 调试时,单击源中显示线程按钮

中调试工具栏。

  1. 查看窗口左侧的滚动条。 在这一行,你可以看到线程标记图标

,类似于两根细线。线程标记指示线程在此位置停止。 注意,线程标记可能被断点不完全遮挡。

  1. 将指针悬停在线程标记上。 屏幕上将显示数据提示。 数据提示将告诉你每个已停止线程的名称和线程 ID。 你还可以查看中的线程的位置并行堆栈窗口

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

在 UWP 应用中,你可以分析使用 Windows.Web.Http API执行的网络操作。 可以使用此工具来帮助调试 web 服务和网络资源。 若要使用该工具,请选择调试 > 性能探查器。 选择网络,然后选择启动。 在应用中,浏览使用 Windows.Web.Http 的应用场景,然后选择 停止收集 生成报表。

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

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

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

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

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

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

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

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

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2019-07-30 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 创建条件断点
  • 创建对象 ID
  • 在源代码中显示线程
相关产品与服务
腾讯云 BI
腾讯云 BI(Business Intelligence,BI)提供从数据源接入、数据建模到数据可视化分析全流程的BI能力,帮助经营者快速获取决策数据依据。系统采用敏捷自助式设计,使用者仅需通过简单拖拽即可完成原本复杂的报表开发过程,并支持报表的分享、推送等企业协作场景。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档