首页 > 编程 > C++ > 正文

C++调试工具——Debug(设置和移除断点)

2020-05-23 14:26:23
字体:
来源:转载
供稿:网友
由于引起运行时错误的原因难以被发现,所以我们有时候要利用工具来完成调试工作。Debug就是VC++提供的一种常用调试工具。它能够让语句一句一句或一段一段执行,并且能够观察程序运行过程中各变量的变化情况。

在介绍如何使用Debug工具之前,我们要介绍一下什么是断点(Breakpoint)。当程序运行到断点的时候,它会暂时停止运行后面的语句,供用户观察程序的运行情况,并等待用户发出指令。断点不是语句,而是附在某条语句上的一个标志。

如何设置和移除断点

点击需要设置断点的语句,使光标移动到该语句所在的行。按下F9键或C++调试工具——Debug(设置和移除断点)按钮就会发现,在该语句之前出现一个红点,这就是断点标志。如下图11.5.1所示:
C++调试工具——Debug(设置和移除断点)
如果要移除已经设置好的断点,则同样点击断点所在语句,按下F9键或C++调试工具——Debug(设置和移除断点)按钮则断点被移除。我们可以个给一个程序设置多个断点。

Go

设置了断点之后,我们就能开始调试程序了。与以前不同,我们不能按执行按钮,而是要按F5键或C++调试工具——Debug(设置和移除断点)按钮,或者选择Build菜单Start Debug中的Go。一旦按下了Go,则程序会正常运行直至遇到断点。

我们以下面这个程序(程序11.5)来演示Debug功能的使用。该程序主要目的是统计一个不多于20项的正整数数列中,有多少对成双倍关系的项,该数列以0结尾。比如数列1 3 4 2 5 6 0中,成双倍关系的项有3对(1和2、2和4、3和6)。
#include <iostream>
using namespace std;
int main()
{
 int a[50],b[50],sum=0;//在此设置断点
   for (int i=0;a[i-1]!=0;i++)
   {
     cin >>a[i];
     b[i]=2*a[i];
   }
   for (i=0;a[i]!=0;i++)
   {
      for (int j=0;b[j]!=0;j++)
      {
         if (a[i]==b[j])
         {
            sum++;
            break;
         }
      }
   }
   cout <<sum <<endl;
   return 0;
}

设置好断点,按下Go按钮以后,我们可以看到如下的界面:
C++调试工具——Debug(设置和移除断点)

在界面中出现了三个我们不熟悉的窗口。在屏幕中间有着很多按钮的小窗口叫Debug窗口,里面的按钮可以控制程序继续运行的方式。在屏幕左下方的窗口称为Variables(变量)窗口,可以观察每句语句执行后变量变化的情况。在屏幕右下方的窗口称为Watch(监视)窗口,用户可以监视一些变量或简单表达式的变化情况。

Debug窗口

C++调试工具——Debug(设置和移除断点)
Debug窗口中,第一行按钮是我们常用的。它们依次是:
Restart——重新开始调试。
Stop Debugging——停止当前调试。
Break Execution——停止程序的执行并转回调试状态。
Apply Code Changes——使调试过程中修改的程序代码生效。
ShowNext Statement——显示将要执行的下一条语句的位置。在语句之前用黄箭头表示。
Step Into——进入语句调用的函数,并进行调试。
Step Over——不调试语句调用的函数。
Step Out——从当前调试的位置回到调用该函数的位置。
Run to Cursor——正常运行直到光标所在的语句。

我们在调试的时候,不要总是按“Step Into”,因为它对于一些系统提供的函数也是有效的。也就是说我们能够用它详细地看到系统是如何实现一个输出功能的,甚至可以看到这些语句的汇编语言形式。但是,这却并不是我们调试的主要目标。如果不小心进入了系统函数里,我们要及时按“Step Out”以退回到我们所编写的程序中来。

在调试过程中,对于大多数语句应该按“Step Over”。如果要调试自己编写的函数,则在调用该函数的语句处按“Step Into”。

Watch窗口

在Watch窗口中分为两列,一列为Name,一列为Value。其中Name是可以被编辑的,我们可以在里面输入变量名或简单表达式。如果改变量或表达式是可以被计算的,则会在Value中显示它们的值,如下图11.5.3所示:
C++调试工具——Debug(设置和移除断点)

如何用Debug找到错误

在Debug中,我们可以让语句一句句地执行。如果执行到某一句语句时发生了运行时错误,那么这个错误一般就是由这个语句引起的。

在Debug中,我们可以观察每一句语句执行的顺序和执行后变量变化的情况。如果发现程序无法实现既定的功能,我们可以将期望的结果和实际的结果作比对,并分析可能引起这些不同的原因。这样一来,大大加快了我们找到问题和解决问题的速度。
发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表