65.9K
CodeProject 正在变化。 阅读更多。
Home

10+ 个强大的 Visual Studio 调试技巧

starIconstarIconstarIconstarIcon
emptyStarIcon
starIcon

4.79/5 (154投票s)

2012年4月3日

CPOL

5分钟阅读

viewsIcon

409457

本文介绍了 Visual Studio 中提供的 10 种节省时间的调试技巧。

引言

调试是开发生命周期中的重要组成部分。有时充满挑战,有时令人费解,有时令人恼火,但有一点是肯定的——对于任何不是微不足道的程序来说,它都是不可避免的。近年来,调试工具的进步使得许多调试任务变得更加容易,并且花费的时间更少。

本文总结了十个调试技巧和技术,这些技巧和技术可以在使用 Visual Studio 时为您节省大量时间。

1. 鼠标悬停以评估表达式

调试可能充满挑战。逐步执行函数以了解出了什么问题,查看调用堆栈以了解该值来自何处……无论哪种情况,添加监视表达式或查看局部变量列表都可能花费相当长的时间。但是,如果您只需将鼠标悬停在感兴趣的变量上,事情就会变得容易。此外,类和结构将通过一次单击展开,从而允许您快速方便地找到所需的字段。

2. 动态更改值

调试器不仅仅是一个分析崩溃和奇怪行为的工具。通过逐步执行新编写的函数并检查其行为是否符合预期,可以防止许多错误。有时,您会好奇“如果这个条件为真,函数是否会正常工作?”。在大多数情况下,这并不意味着更改代码并重新启动。只需将鼠标悬停在变量上,双击该值,然后输入新值!

3. 设置下一条语句

一个典型的调试场景是逐步执行函数来分析函数调用为什么会失败。当您刚刚发现一个函数调用了另一个返回错误的函数时,您会怎么做?重新启动调试?有个更好的主意:只需将黄色的语句标记拖到您希望接下来执行的行,例如刚刚失败的函数,然后简单地单步进入。很简单,不是吗?

4. 编辑并继续

调试一个复杂的程序或插件?发现了一个错误,但不想花费时间停止、重新生成和重新启动,而且该函数被调用得太频繁,无法每次都使用前面的技巧?没问题,只需原地修复错误并继续调试。Visual Studio 将修改您的程序并继续调试,无需重新启动。

但是,请注意。编辑并继续存在一系列已知限制。首先,它不适用于 64 位代码。如果它无法为您的 C# 应用程序工作,请转到项目设置中的“**生成**”页面,然后选择“x86”作为“**平台目标**”。不用担心,“发布”配置的“**平台目标**”与调试配置是分开的,仍然可以是“AnyCPU”。

其次,编辑并继续的更改应该是局部的,即在一个方法内。如果您更改了方法签名,添加了新方法或类,您将不得不重新启动应用程序,或者撤销更改以继续。更改包含 lambda 表达式的方法意味着修改自动生成的委托类,因此阻止继续。

5. 便捷的监视窗口

可能,每个现代调试器都有一个监视窗口。然而,Visual Studio 的真正酷之处在于您可以轻松地在那里添加和删除变量。只需单击空白行,键入您的表达式,然后按 Enter。或者,只需按 Delete 键删除不再需要的表达式。

此外,您可以从监视窗口获取的信息不仅限于“普通”变量。您可以输入 $handles 来跟踪您的应用程序打开的句柄数(并更轻松地查找泄漏),$err 来查看最后一个函数的错误代码(然后使用工具->错误查找以获得有意义的描述),或 @eax(64 位代码为 @rax)来查看包含函数返回值的寄存器。

6. 注释反汇编

使用交互式反汇编模式可以更轻松地优化程序关键部分的性能。Visual Studio 会显示与您代码的每一行相对应的指令,并允许您逐条执行代码,以及在任意位置设置断点。当然,表达式的评估和修改将与 C++ 代码一样工作。

7. 带堆栈的线程窗口

调试多线程应用程序可能很痛苦。也可能很有趣。这取决于您的调试器。Visual Studio 2010 的一个真正不错的特性是线程窗口中的堆栈视图。您可以方便地概览所有线程,并直接从窗口导航其调用堆栈。

8. 条件断点

如果您试图重现罕见事件,并且您的断点产生了太多的误报,您可以轻松地使它们成为条件断点!只需指定断点的条件,当条件不满足时,Visual Studio 将自动忽略该断点。

9. 内存窗口

某些错误是由不正确的结构定义、缺少对齐属性等引起的。查看原始内存内容可以简化查找和修复这些错误。Visual Studio 提供了一个便捷的内存窗口,它可以将值解释为 8/16/32/64 位数字,以及浮点数,并且允许通过在旧值上方键入新值来动态更改它们,就像在文本编辑器中一样。

10. 转到定义

最后一个要提到的功能不直接与调试相关,而是与探索大型项目相关。如果您试图查找您自己未编写的代码中的错误,快速回答“这是什么类型”或“这个函数做什么”可以为您节省大量时间。Visual Studio 通过“转到定义”命令轻松实现这一点。

11. 命令窗口

这个第十一个技巧是由 chaau 建议的,它确实可以为您节省大量时间。Visual Studio 支持命令窗口,可以通过“**视图->其他窗口->命令窗口**”菜单激活。激活后,您可以键入各种命令来自动化调试。例如,您可以通过运行一个简单的命令轻松评估一个 MFC COleDateTime 变量

? dt.Format("%Y-%m-%d %H:%M:%S")  
© . All rights reserved.