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

Posted 小倪同学 -_-

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C语言学习笔记实用的调试技巧相关的知识,希望对你有一定的参考价值。

在这里插入图片描述

调试的基本步骤

  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()
{
	int num = 10;
	int* const p = &num;
	int n = 100;
	*p = 20;//right
	p = &n;//err
		
	const int* p = &num;//或者int const* p = &num;	
	int n = 100;
	*p = 20;//right
	p = &n;//err
}

3.养成良好的编码风格

4.添加必要的注释

5.避免编码的陷阱。

编程常见的错误

编译型错误

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

链接型错误

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

运行时错误

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

以上是关于C语言学习笔记实用的调试技巧的主要内容,如果未能解决你的问题,请参考以下文章

C语言初阶笔记程序员必须要会的实用调试技巧(含库函数strcpy和strlen的模拟实现)!!

C语言初阶笔记程序员必须要会的实用调试技巧(含库函数strcpy和strlen的模拟实现)!!

C语言初阶笔记程序员必须要会的实用调试技巧(含库函数strcpy和strlen的模拟实现)!!

C语言VS2017 - 实用调试技巧

C语言有这个就够了七.实用调试技巧

Chrome 实用调试技巧