程序调试原理及步骤

在单片机或者程序开发过程中,有一个很重要的步骤就是“调试”又叫“debug”。通过调试能够迅速找到程序出现的问题,用好调试能让我们事半功倍。

“调试”的过程就是在程序段某个可能出现问题的地方打一个“断点”,程序运行到断点之后就会停止运行,之所以叫“断电”,一个可以从它的工作原理上理解,因为打断点实现程序停止的工作机理就叫“中断”,和平时用的外部中断,定时中断都是一样的。另一个还可以直观的理解,因为程序运行到这个点就“断了”,所以叫断点。

那为什么要打断点,或者说打断点的意义在哪里?首先,编写一个大一点的程序基本不可能毫无失误全部做对。不管是什么原因,总之就是程序运行结果和应该得到的结果不一样,但我们有无法很快的确定错误的地方和原因的时候,打断点的意义就凸显出来了/。整个程序我们可以把他分成几个小部分,按照如果每个小部分运行正确,那整个程序一定也运行正常的逻辑来讲,打断点就是让程序一个小部分一个小部分运行,这个过程中找到出现错误的那小部分程序段并将其改正。

如何确定俩个断点之间程序是否运行正常呢?还要用到调试过程中一个常用的功能就是“变量监测”,也就是“Watch”。通过Watch能够观察定义的每个变量的值,通过看这些值是否和预期一样来确定bug存在的地方。

下面就以VC6.0为例讲解一下具体调试的过程。程序:输入三个数并排列顺序。

#include <stdio.h>
int main()
{
    int a,b,c,t;    /*定义4个基本整型变量a、b、c、t*/
     a=2;b=3;c=1;
    if(a>b)    /*如果a大于b,借助中间变量t实现a与b值的互换*/
    {
        t = a;
        a = b;
        b = t;
    }
    if(a>c)    /*如果a大于c,借助中间变景t实现a与c值的互换*/
    {
        t = a;
        a = c;
        c = t;
    }
    if(b>c)    /*如果b大于c,借助中间变量t实现b与c值的互换*/
    {
        t = b;
        b = c;
        c = t;
    }
    printf("The order of the number is:\n");
    printf("%d,%d,%d",a,b,c);    /*输出函数顺序输出a、b、c的值*/
    return 0;
}

1.首先将断点打在第一个if语句之前,启动debug,程序运行至断点后会停止,同时监测abc变量的值。从图上可以看出,在断点之前程序只给a,b,c完成了赋值,从Watch窗口可以看到三个变量的具体值与程序赋的值一样,程序正常。
在这里插入图片描述
2.接着将断点打在第二个if之前。运行程序并监测三个变量。第一个断点和第二个断点之间的代码意思为如果a>b,就交换二者的值,很明显此处a<b,所以不进入第一个if判断语句,四个变量的值不变。
在这里插入图片描述

3.断点打在下一个if语句之前,运行程序。可以看出,程序运行至第三个断点后,有三个变量的值发生了变化且标红了,因为这一段代码的意思为如果a>c,就交换a,c的值,此处明显a>c,结果与我们预期一样,二者完成了交换。
在这里插入图片描述

以上就是断点调试的基本步骤,不管什么程序,步骤都大同小异,气基本原理是不会改变的,此处附上调试程序常用的选项及意义。

在这里插入图片描述
从左往右依次为:
(1) show next segment (单步运行)。
(2) step into (进入)。
(3) step over(跳过.;
(4) step out (跳出)。
(5) run to Cursor(运行至断点)。
(7) Watch(查看) 。

  • 2
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

雷达爆破手

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值