实用调试技巧(上)

简介: 实用调试技巧

1.什么是bug?

作为程序员,每天被bug支配着,当然应该了解下对手了。

bug原意本来为昆虫的意思,1947年9月9日,葛丽丝·霍普(Grace Hopper)发现了第一个电脑上的bug。当在Mark II计算机上工作时,整个团队都搞不清楚为什么电脑不能正常运作了。经过大家的深度挖掘,发现原来是一只飞蛾意外飞入了一台电脑内部而引起的故障(如图所示)。这个团队把错误解除了,并在日记本中记录下了这一事件。也因此,人们逐渐开始用“bug”来称呼计算机中的隐错。

2.调试是什么?有多重要?

所有发生的事情都一定有迹可循,如果问心无愧,就不需要掩盖也就没有迹象了;如果问心有愧,就必然需要掩盖,那就一定会有迹象,迹象越多就越容易顺藤而上,这就是推理的途径

顺着这条途径顺流而下就是犯罪,逆流而上就是真相

一名优秀的程序员是一名出色的侦探

每一次尝试都是尝试破案的过程

2.1调试是什么?

调试(英语:Debugging / Debug),又称除错,是发现和减少计算机程序或电子仪器设备中程序

错误的一个过程。

2.2 调试的基本步骤

  • 发现程序错误的存在
  • 隔离、消除等方式对错误进行定位
  • 确定错误产生的原因
  • 提出纠正错误的解决办法
  • 对程序错误予以改正,重新测试

发现程序错误:程序员自己、测试人员、用户

3.debug和release的介绍

  • Debug 通常称为调试版本,它包含调试信息,并且不作任何优化,便于程序员调试程序
  • Release 称为发布版本,它往往是进行了各种优化,使得程序在代码大小和运行速度上都是最优的,以便用户很好地使用

测试人员站在用户的角度,测试的是发布版本

代码:

#include <stdio.h>
int main()
{
 char *p = "hello world";
 printf("%s\n", p);
 return 0;
}

上述代码在Debug环境的结果展示

上述代码在Release环境的结果展示

DebugRelease反汇编展示对比

所以我们说调试就是在Debug版本的环境中,找代码中潜伏的问题的一个过程

那编译器进行了哪些优化呢? 请看如下代码:

#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;
}

如果是 debug 模式去编译,程序的结果是死循环。

如果是 release 模式去编译,程序没有死循环。

那他们之间有什么区别呢?

就是因为优化导致的

相关文章
|
6月前
|
C++
VS调试技巧
VS调试技巧
34 0
|
网络协议 C++
继续分享 5 个实用的 vs 调试技巧
继续分享 5 个实用的 vs 调试技巧
|
搜索推荐 C++ 容器
你很可能需要知道这个调试小技巧
你很可能需要知道这个调试小技巧
|
5月前
实用调试技巧(2)
实用调试技巧(2)
34 0
|
6月前
|
IDE 开发工具
掌握条件断点,调试技巧大揭秘
掌握条件断点,调试技巧大揭秘
111 0
|
6月前
|
程序员
关于MSVS的实用调试技巧
关于MSVS的实用调试技巧
55 0
|
C++ 索引
再分享 5 个 vs 调试技巧
再分享 5 个 vs 调试技巧
|
程序员 编译器
|
程序员 C语言