【C语言】实用调试技巧

文章目录

  • 1、引言
  • 2、调试
    • 2.1、调试是什么
    • 2.2、调试的基本步骤
    • 2.3、Debug和Release
    • 2.4、调试时快捷键的组合
  • 3、调试窗口
  • 4、如何写出易于调试的代码
  • 5、编程常见的错误

1、引言

学习编程的过程中,学会调试自己编写的代码也是一种很重要的能力,通过这篇博客来学习一些实用调试技巧

2、调试

2.1、调试是什么

调试(Debugging / Debug),又称除错,是发现和减少计算机程序或电子仪器设备中程序错误的一个过程。

2.2、调试的基本步骤

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

2.3、Debug和Release

1、Debug通常称为调试版本,它包含调试信息,并且没有经过任何优化,方便程序员进行程序调试
2、Release通常称为发布版本,它往往是进行了各种优化,使程序在代码大小和运行速度上都是最优的,以便用户更好的使用

2.4、调试时快捷键的组合

1、F9快捷键的作用是在程序中设置一个断点
2、断点 — 程序执行到断点处就会主动停下来
3、由于断点的特性,所以我们在使用 F9 的时候通常和 F5 一起使用
4、F5的作用是开始调试,如果没有断点,F5 会一口气执行完整段程序,如果有断点,F5会跳到断点处
5、F5会向后执行代码,到下一个逻辑上的断点
6、F10 — 逐过程,遇到函数会直接执行函数
7、F11 — 逐语句,遇到函数会逐句分析函数

3、调试窗口

1、监视窗口
监视窗口中监视的对象需要自己手动添加
2、内存窗口
内存窗口中你可以观察内存中发生的变化
3、调用堆栈
反应函数调用堆栈,观察函数调用的一个变化

4、如何写出易于调试的代码

1、善于使用 assert() 这个库函数
【C语言】实用调试技巧_第1张图片
assert的作用是断言,可以及时报错,指出错误在哪里
除此之外,我们还可以对这段代码进行一些优化
【C语言】实用调试技巧_第2张图片
将循环条件进行更改(如上图所示)代码会变得更加简练

2、善于使用const

const修饰变量   const修饰指针(分为const放在 * 左边和放在 * 右边)

const修饰变量
使变量具有常属性,也就是常变量,使变量不能被修改(但是可以通过指针修改)

const修饰指针
当const放在 * 左边时,const修饰的是指针指向的内容,表示指针指向的内容不能通过指针来改变,但是指针变量本身是可以改变的

const int* p = &n;

当const放在 * 右边时,const修饰的是指针变量本身,指针变量本身不能被修改,但是指针指向的内容是可以通过指针改变的

int* const p = &n;

了解了const的用法后,我们还能对上面的代码进行进一步的优化
【C语言】实用调试技巧_第3张图片
Tips:const在二级指针中的效果
1、const int ** p 表示 ** p 代表的整形内存放的是常量,不能被修改,而指针p本身可以被任意修改赋值。
2、int ** const p 表示 ** p 代表的整形内存放的是变量,可以被任意修改,而指针p本身是不能被修改的
3、int * const * p是什么意思呢?
由于int * const * p是一个二级指针,那么const现在修饰的是int,代表 * p 的值是不能被修改的。

通俗的说,也就是二级指针p所指向的一级指针 * p 是不能被修改的,而 **p 所代表的整形内存可以被任意修改,指针p本身也可以被任意修改!

3、模拟实现strlen函数
学习了上述知识,我们来模拟实现strlen
【C语言】实用调试技巧_第4张图片

5、编程常见的错误

1、语法错误
类似于中文字符误用,库函数单词打错之类的最简单的错误,此处不在细谈

2、链接错误
“一个无法解析的外部符号”,通常出现在将需要引用的函数名称被打错

3、运行时错误
只能通过调试的方法,逐步定位问题,最难解决

你可能感兴趣的:(c语言,c++,开发语言)