C语言学习笔记(9)实用的调试技巧

在这里插入图片描述

调试的基本步骤

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

Debug和Release的介绍

  • Debug通常称为调试版本,它包含调试信息 ,并且不作任何优化,便于程序员调试程序。
  • Release称为发布版本,它往往是进行了各种优化,使得程序在代码大小和运行速度上都是最优的,以便用户很好地使用。
#include<stdio.h>
int main()
{
	char *p = "hello world";
	printf("%s\n", p);
	return 0;
}

上述代码在Debug环境的运行展示
在这里插入图片描述
上述代码在Release环境的运行展示
在这里插入图片描述

Windows调试环境介绍

快捷键

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

F9
创建断点和取消断点断点的重要作用,可以在程序的任意位置设置断点。这样就可以使得程序在想要的位置随意停止执行,继而一步步执行下去。

F10
逐过程,通常用来处理一个过程 ,一个过程可以是一次函数调用,或者是一条语句。

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

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

更多快捷键

调试时查看当前信息

查看临时变量

调试开始后用于观察变量的值
在这里插入图片描述
在这里插入图片描述

查看内存的信息

调试开始后用于观察内存信息
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

查看汇编信息

(1)第一种方式:右击鼠标,选择【转到反汇编】
在这里插入图片描述
(2)第二种方式:在任务栏中选取

在这里插入图片描述

查看寄存器信息

在这里插入图片描述

查看调用堆栈

在这里插入图片描述

通过调用堆栈,我们可以清楚的了解函数调用关系。

在这里插入图片描述

断点

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

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

优秀代码的特点

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

常见的coding技巧

1.使用assert

assert断言指令,若assert后条件为真则终止程序,并提示错误。
assert需引头文件#include<assert>

#include<stdio.h>
#include<assert.h>
void my_printf(int* m)
{
	assert(m != NULL);
	printf("%d", *m);
}
int main()
{
	int a = 10;
	int* b = NULL;
	int* c = NULL;
	b = &a;
	my_printf(b);
	my_printf(c);
	return 0;
}

在这里插入图片描述

2.尽量使用const

const修饰指针变量的时候

  1. const 如果放在 * 的左边,修饰的是 *p, 表示指针指向的内容是不能通过指针来改变的但是指针变量本身是可以修改的
  2. const 如果放在 * 的右边,修饰的是指针变量p,表示指针变量不能被改变但是指针指针的内容,可以被改变
int main()
{
	const int* p = &num;//等同于int const* p = &num;	
	int n = 100;
	*p = 20;//err
	p = &n;//right
	
	int num = 10;
	int* const p = &num;
	int n = 100;
	*p = 20;//right
	p = &n;//err
}

3.养成良好的编码风格

4.添加必要的注释

5.避免编码的陷阱。

编程常见的错误及解决方法

编译型错误

直接看错误提示信息 (双击), 解决问题。或者凭借经验就可以搞定。相对来说简单。

链接型错误

看错误提示信息,主要在代码中找到错误信息中的标识符,然后定位问题所在。一般是标识符名不存在或者拼写错误。

运行时错误

借助调试 ,逐步定位问题。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值