实用类调试技巧

本文介绍了程序中的bug概念,从历史上的起源到现代计算机中的应用。同时详细讲解了调试的过程、步骤,以及Windows环境下的调试快捷键,包括Debug和Release版本的区别。还强调了编写易于调试的代码的重要性及技巧。
摘要由CSDN通过智能技术生成

什么是bug

程序错误,即英文的Bug,也称为缺陷、臭虫,是指在软件运行中因为程序本身有错误而造成的功能不正常、死机、数据丢失、非正常中断等现象。 早期的计算机由于体积非常庞大,有些小虫子可能会钻入机器内部,造成计算机工作失灵。史上的第一只 Bug ,真的是因为一只飞蛾意外走入一电脑而引致故障,因此Bug从原意为臭虫引申为程序错误。

第一代的计算机是由许多庞大且昂贵的真空管组成,并利用大量的电力来使真空管发光。可能正是由于计算机运行产生的光和热,引得一只小虫子(Bug)钻进了一支真空管内,导致整个计算机无法正常工作。研究人员费了半天时间,总算发现原因所在,把这只小虫子从真空管中取出后,计算机又恢复正常。后来,Bug这个名词就沿用下来,用来表示电脑系统或程序中隐藏的错误、缺陷、漏洞等问题。——百度百科

   什么是调试,如何去调试

在我们写代码的时候,我们写出的代码可能不会一次性就完成我们的要求,也可能会执行错误,需要我们去修改,顺着踪迹寻找错误以及修改,即为调试。

 那我们应该如何去调试呢?

调试的步骤:

1.发现程序错误所在

2.以隔离、消除等方式对错误进行定位

3.确定错误的产生原因

4.提出纠正错误的办法

5.改正错误,重新调试

Debug与Release的介绍

Debug通常称为调试版本,它包含调试信息,并且不做任何优化,以便于调试程序

Release称为发布版本,它往往是经过了各种优化,使得程序在代码大小与运行速度上都是最优解,以便用户更好的使用。

而在企业开发的过程中,一般的流程为:

Windows 环境调试介绍

调试环境准备

适当运用快捷键:

 F5
启动调试,经常用来直接跳到下一个断点处。
F9
创建断点和取消断点
断点的重要作用,可以在程序的任意位置设置断点。
这样就可以使得程序在想要的位置随意停止执行,继而一步步执行下去。
F10
逐过程,通常用来处理一个过程,一个过程可以是一次函数调用,或者是一条语句。
F11
逐语句,就是每次都执行一条语句,但是这个快捷键可以使我们的执行逻辑进入函数内部(这是最
长用的)。
CTRL + F5
开始执行不调试,如果你想让程序直接运行起来而不调试就可以直接使用

当然还有更多的调试快捷键

调试的时候查看程序当前信息

当我们开始调试时,在窗口处我们可以看到许多调试注意的点:

自动窗口,监视

 

自动窗口与监视在显示上似乎非常相似,自动窗口在调试过程中会自动显示变量的变化情况,而监视窗口可以根据使用者的需求,来对变量或汇编中的数据等进行监视,监视在调试时是非常好用的功能,实际演示如上两图

局部变量

如同名字一样,是对于程序中的局部变量进行显示与监视。

调用堆栈

调用堆栈在右下区域,可以看见,在如图所示的代码中有main主函数与Number_of的自定义函数,调用堆栈在调试的过程中显示所用函数,实际上是反应了程序在运行过程中函数调用的逻辑,通过其来表示。

内存

 内存窗口可以查看我们调用的变量,数组,指针所在地址与存储数据,展现程序在执行时在内存中的执行变化。比起监视,更加具体。

反汇编

反汇编,就是C语言代码执行转换为汇编语言实现。

寄存器

可以观察在程序在寄存器上面的变化,实际上也可以通过监视来实现。

调试实例

#include <stdio.h>
int main()
{
   int i = 0;
   int arr[10] = {0};
   for(i=0; i<=12; i++)
    {
     arr[i] = 0;
     printf("hehe\n");
    }
   return 0;
}

 大家可以想想这个程序的执行结果

实际如下(在32位环境下):

printf的执行陷入了无限循环,这是为什么呢?

 在栈区存储运行的时候,arr[12]的地址与i的地址为同一个,导致越界访问时给arr[12]赋值,也改变了i值,导致循环不会终止。 

那么我们应该如何写代码呢?

如何写出好(易于调试)的代码

优秀的代码拥有以下特点:

1. 代码运行正常
2. bug很少
3. 效率高
4. 可读性高
5. 可维护性高
6. 注释清晰
7. 文档齐全

我们在写代码的时候,也可以多用以下技巧:

1. 使用assert
2. 尽量使用const
3. 养成良好的编码风格
4. 添加必要的注释
5. 避免编码的陷阱

  • 17
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

夕·誓

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

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

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

打赏作者

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

抵扣说明:

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

余额充值