Visual Studio的7种更不为人所知的调试策略

凯西·安德森

所以,你真的很喜欢了解7个不太常见的Visual Studio调试漏洞? 好消息是总是有更多的东西要学!VisualStudio调试器是一种迷人的工具,可以在查找和修复应用程序中的问题时节省大量时间。它充满了可以简化调试的工具……如果您知道它们的存在,以及在哪里可以找到它们!让我们再看7种你可以用来#SuperChargeYour调试

1.在不更改代码的情况下编辑变量的值

当你遇到一个变量,而它不是你认为它应该是什么的时候,你有没有调试过?或者您只是想更改它,看看代码在不同值下的行为如何?调试时,只需使用最适合流的方法编辑内存中变量的值,即可轻松完成此操作:数据提示,这个自动、本地或监视窗口,或即时窗口。

A.将鼠标悬停在变量上以获得数据提示然后单击表中的值或右键单击并选择“编辑值”从上下文菜单中选择。此时会出现编辑光标,您可以为变量提供新值。

数据提示编辑值

B.在自动、本地或监视窗口双击网格中的值或右键单击并选择“编辑值”从上下文菜单中选择。该值变为可编辑,您可以为变量提供新值。

本地值编辑

C.在即时窗口,可以使用代码语法将变量重新分配给新值。例如,您可以键入“x=12;”这将更改范围内变量的内存中值x个成为数字12。如果需要在赋值之前创建或操作变量,则此方法最为有用。

即时窗口编辑值

2.查看递归函数调用中的值

您通常会使用Debug的许多语句调试递归函数吗。WriteLine()?你可能很难记住递归的结果。这种心理负荷的一个辅助工具是使用并行监视窗口查看递归调用变量的更改。

  1. 打开并行监视窗口(调试/Windows/Parallel Watch)
  2. 点击“<添加手表>”并键入您关心的变量的名称。
  3. 在调试递归调用时,您将看到它们被添加到窗口中的新行中

平行手表

3.在调用堆栈中显示参数值

大多数开发人员使用调用堆栈就像调试会话中当前上下文的映射。它提供了代码调用进入此状态的历史记录。引入额外的信息来确定自己的方向,如参数值,可能会非常有用。

  1. 在中的框架上单击鼠标右键调用堆栈。
  2. 在上下文菜单中,选择以下选项“显示参数值”
  3. 现在可以看到这些值作为Name列中输入参数的一部分直接内联

注意:当中的“Show Parameter Values”处于打开状态且调用堆栈可见时,可能会对调试会话产生性能影响。我们建议在您不积极使用该选项时将其关闭。

CPP调用堆栈参数值

4.在不手动查找源的情况下中断函数

您是否曾遇到过这样的情况:您知道需要调试什么,但查找包含该代码的源文件会有点困难?在调试器中设置断点而无需知道代码驻留在哪个文件和行的一种快速方法是设置函数断点。

  1. 按下CTRL+B组合键。或选择调试/新断点/功能断点。
  2. 键入要中断的函数的名称。单击“确定”。
  3. 开始调试,触发代码以执行,并观察您在不必手动查找的源文件中的神奇断点处停止。

功能断点

5.标记线程并将所有线程运行到同一位置

调试多线程代码时,很可能会遇到断点并采取步骤,导致程序推进其他线程。有时为了检查一个bug,将所有线程都停在同一个位置可能会更容易,这样您就可以检查当时程序的状态。有一种简单的方法可以做到这一点,即标记线程,然后触发将标记的线程运行到游标。

  1. 找出您感兴趣的线程。您可以使用显示源中的线程,的并行调试窗口,或线程窗口。
  2. 选择Flag图标标记您感兴趣的线程。
  3. 右键单击要检查应用程序的代码行。
  4. 在上下文菜单中选择将标记的线程运行到游标。

注意:当显示源中的线程已打开或任何与线程相关的窗口都可见。我们建议您仅在积极使用这些功能进行调试时才选择这些功能。

运行标记的线程

6.切换活动线程以查看上下文

并行监视窗口非常适合跨线程查看许多变量,即使是您还没有停止的变量。但是,当您想检查该线程上应用程序的详细状态时,该怎么办呢?黄色箭头显示当前线程上的当前指令,并为调试器的其余部分设置上下文。监视窗口、数据段和调用堆栈都显示此上下文中的状态。调试器允许您更轻松地切换此上下文切换到线程…

  1. 选择要检查的螺纹。您可以使用显示源中的线程,的并行调试窗口,或线程窗口
  2. 右键单击线程,然后选择切换到线程…然后选择你的线程。
  3. 请注意黄色箭头如何更改为该线程的位置,其他窗口现在具有该上下文。

切换线程

还可以使用调试位置工具栏。单击枚举程序中线程的下拉列表,然后选择要切换到的线程调试位置工具栏如果您注意到其他与线程相关的功能对性能的影响,那么这是一个很好的工具。此工具栏的功能不会显著影响性能,可以用作我提到的许多线程场景的快捷方式。

调试位置工具栏

注意:当显示源中的线程已打开或任何与线程相关的窗口都可见。我们建议您仅在积极使用这些功能进行调试时才选择这些功能。

7.当C++代码中的变量值更改时停止

很难追踪特定变量在何处更改其值。对于本地开发人员,有一种特殊的断点类型数据断点,这可以帮助您追踪因变量被意外操纵而导致的问题。

  1. 在内存中创建对象后,在代码中的某个位置停止。
  2. 选择调试/新断点/数据断点。
  3. 键入要了解的变量的地址。例如,&MyVariableName或0x0085F918
  4. 选择从该地址开始要监视的字节数。
  5. 触发断点,调试器将在修改该内存地址的代码行上停止。

数据断点

注意:重要的是要记住,每次开始调试时,内存地址都是不同的,因此每次启动新的调试会话时,都需要清除并重置数据断点。一次可以激活的数据断点的数量受到环境硬件的限制,当您达到该限制时,调试器将发出警告。

学到了什么?让我们知道!

你最喜欢的鲜为人知的调试功能是什么?下面的评论!

0条评论

讨论结束。

反馈usabilla图标