C语言实用的调试技巧

简介: C语言实用的调试技巧

一、 什么是bug?

bug 其实在一开始的英文中是小昆虫的意思

在1947年9月9日,葛丽丝·霍普(Grace Hopper)发现了第一个电脑上的bug。有一次Mark II突然宕机,整个团队都搞不清楚为什么电脑不能正常运作了。经过大家的深度挖掘,发现原来是一只飞蛾意外飞入了一台电脑内部而引起了故障(如图所示)。这个团队很快排除错误,并在日志本中记录下了这一事件。也因此,人们逐渐开始用“Bug”(原意为“虫子”)来称呼计算机中的隐错。现在在华盛顿的美国国家历史博物馆中还可以看到这个遗稿。第一次被发现的导致计算机错误的飞蛾,也是第一个计算机程序错误。

二、什么是调试?

1. 调试的定义

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

错误的一个过程。

2. 调试的基本步骤

发现程序错误的存在

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

确定错误产生的原因

提出纠正错误的解决办法

对程序错误予以改正,重新测试

比如说以下面这段代码为例

明显与我们的预期不符啊

我们便开始调试程序

经过调试窗口我们发现

原来问题出现在这里

ret一开始出现的数字是0

0乘上任何数都是0 最后的sum当然会是0啦

那我们将代码修改如下

奇怪了 1!+2!+3!并不等于十五啊

这说明我们的程序又出现了问题

我们继续开始调试

那经过我们新一轮的debug 我们又发现了 原来啊ret的值再每次循环后没有重置 最终导致了这个错误

那么我们再每次进入循环后将ret的值重置为1

代码如下

这个时候我们可以发现 代码就可以无bug完美运行啦

这就是一个完成的debug过程

3. Debug版本和Release版本

Debug版本就是我们程序员使用的调式版本 它包含调试信息 且不做任何优化 便于程序员调试

Release版本就是一个发布版本 它会对程序做各种优化 使得程序在大小和运行速度上是最优的 以便于用户更好的使用

Debug版本

Release版本

我们可以很明显的发现两个程序的大小都不一样

再看以下代码在Dbug版本

它打印13和hehe之后报错了

Release版本下

它没有报错 打印了13个 hehe

它们之间又什么区别呢?

这就是因为两个版本之间的优化不同所导致的

至于为什么会在debug x86环境下报错

这里大家要首先知道两个知识点

数组随着下标的增长 地址由低到高不断变化

栈区中优先使用高地址进行压栈操作

4. 进入调试环境

5. 记住快捷键

F5 启动调试,经常用来直接跳到下一个断点处。

F9 创建断点和取消断点 断点的重要作用,可以在程序的任意位置设置断点。

这样就可以使得程序在想要的位置随意停止执行,继而一步步执行下去。

F10 逐过程,通常用来处理一个过程,一个过程可以是一次函数调用,或者是一条语句。与F11的区别是它不进入函数内部

F11 逐语句,就是每次都执行一条语句,但是这个快捷键可以使我们的执行逻辑进入函数内部(这是最常用的)

当然还有更多的快捷键使用需要我们熟悉并使用,我推荐看这位博主的文章

VS中常用的快捷键_vs快捷键-CSDN博客

6.多多动手,尝试调试,才能有进步

一定要熟练掌握调试技巧。

初学者可能 80% 的时间在写代码, 20% 的时间在调试。但是一个程序员可能 20% 的时间在写

程序,但是 80% 的时间在调试。

我们所讲的都是一些简单的调试。

以后可能会出现很复杂调试场景:多线程程序的调试等。

多多使用快捷键,提升效率。

 

目录
相关文章
|
6月前
|
存储 编译器 C语言
【C语言】VS实⽤调试技巧&(Debug和Release)监视&内存2
【C语言】VS实⽤调试技巧&(Debug和Release)监视&内存
|
6月前
|
程序员 C语言 C++
【C语言】VS实⽤调试技巧&(Debug和Release)监视&内存1
【C语言】VS实⽤调试技巧&(Debug和Release)监视&内存
|
6月前
|
C语言
C语言使用宏定义实现等级调试输出PRINT_LEVEL
C语言使用宏定义实现等级调试输出PRINT_LEVEL
119 0
|
24天前
|
C语言
C语言调试
C语言调试
14 0
|
3月前
|
C语言 索引
C语言编译环境中的 调试功能及常见错误提示
这篇文章介绍了C语言编译环境中的调试功能,包括快捷键操作、块操作、查找替换等,并详细分析了编译中常见的错误类型及其解决方法,同时提供了常见错误信息的索引供参考。
|
5月前
|
安全 编译器 程序员
【C语言】:VS实用调试技巧和举例详解
【C语言】:VS实用调试技巧和举例详解
48 1
|
5月前
|
存储 编译器 C语言
C语言学习记录——调试技巧(VS2019环境下)
C语言学习记录——调试技巧(VS2019环境下)
52 2
|
5月前
|
程序员 编译器 C语言
C语言中的assert.h:调试助手与断言详解
C语言中的assert.h:调试助手与断言详解
|
6月前
|
程序员 编译器 测试技术
C语言初阶⑨(调试)(如何写出好的代码)(模拟实现strcpy和strlen)
C语言初阶⑨(调试)(如何写出好的代码)(模拟实现strcpy和strlen)
45 1
|
6月前
|
NoSQL 编译器 C语言
【C 言专栏】C 语言中的调试技巧与工具
【5月更文挑战第6天】在C语言编程中,调试是必不可少的技能,涉及基本技巧如打印输出、断点调试和单步执行,以及使用GCC、GDB、Visual Studio和Eclipse CDT等工具。高级技巧包括内存检查和性能分析。通过分析问题、设置断点、逐步调试和检查逻辑来解决错误。调试时需保持耐心,合理选用工具,记录过程,并避免过度调试。熟练掌握这些技能将提升代码质量和开发效率。
134 0
【C 言专栏】C 语言中的调试技巧与工具