【C语言】实用调试技巧

目录

1.什么是bug?

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

2.1 调试是什么?

2.2 调试的基本步骤 

2.3 Debug和Release的介绍

3. Windows环境调试介绍 

3.1 调试环境的准备 

3.2 学会快捷键 

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

3.3.1 查看临时变量的值

3.3.2 查看内存信息

3.3.3 查看调用堆栈 

3.3.4 查看汇编信息  

3.3.5 查看寄存器信息 

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

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

优秀的代码:


1.什么是bug?

Grace Hopper在1947年在MarkII机器运行程序时发现的第一个程序“bug”,被贴在她的本子上了。
它真的是个虫子。这只夹扁的小飞蛾在MarkⅡ计算机的继电器触点里,它“卡”住了机器的运行,导致运行出错。

 

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

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

2.1 调试是什么?

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

2.2 调试的基本步骤 

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

2.3 DebugRelease的介绍

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

我们说调试就是在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 模式去编译,程序没有死循环。
那他们之间有什么区别呢?
就是因为优化导致的.

变量在内存中开辟的顺序发生了变化,影响到了程序执行的结果。

3. Windows环境调试介绍 

 注:linux开发环境调试工具是gdb,后期博客会介绍

3.1 调试环境的准备 

 在环境中选择 debug 选项,才能使代码正常调试。

3.2 学会快捷键 

 最常使用的几个快捷键:

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

CTRL + F5: 开始执行不调试,如果你想让程序直接运行起来而不调试就可以直接使用。

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

3.3.1 查看临时变量的值

在调试开始之后,用于观察变量的值。

 

3.3.2 查看内存信息

在调试开始之后,用于观察内存信息。

3.3.3 查看调用堆栈 

通过调用堆栈,可以清晰的反应函数的调用关系以及当前调用所处的位置。 

3.3.4 查看汇编信息  

可以切换到汇编代码。 

3.3.5 查看寄存器信息 

可以查看当前运行环境的寄存器的使用信息 

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

  • 一定要熟练掌握调试技巧。
  • 初学者可能80%的时间在写代码,20%的时间在调试。但是一个程序员可能20%的时间在写程序,但是80%的时间在调试。
  • 我们所讲的都是一些简单的调试。 以后可能会出现很复杂调试场景:多线程程序的调试等。
  • 多多使用快捷键,提升效率

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

优秀的代码:

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

常见的coding技巧:

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

 

 

  • 12
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 9
    评论
评论 9
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值