C语言学习笔记实用的调试技巧
Posted 小倪同学 -_-
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C语言学习笔记实用的调试技巧相关的知识,希望对你有一定的参考价值。
文章目录
调试的基本步骤
- 发现程序错误的存在
- 以隔离、消除等方式对错误进行定位
- 确定错误产生的原因
- 提出纠正错误的解决办法
- 对程序错误予以改正,重新测试
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)第二种方式
查看寄存器信息
查看调用堆栈
!断点
如何写出好(易于调试)的代码。
优秀代码的特点
- 代码运行正常
- bug很少
- 效率高
- 可读性高
- 可维护性高
- 注释清晰
- 文档齐全
常见的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修饰指针变量的时候
- const 如果放在的左边,修饰的是p,表示指针指向的内容,是不能通过指针来改变的但是指针变量本身是可以修改的
- const 如果放在*的右边,修饰的是指针变量p,表示指针变量不能被改变但是指针指针的内容,可以被改变
int main()
{
int num = 10;
int* const p = #
int n = 100;
*p = 20;//right
p = &n;//err
const int* p = #//或者int const* p = #
int n = 100;
*p = 20;//right
p = &n;//err
}
3.养成良好的编码风格
4.添加必要的注释
5.避免编码的陷阱。
编程常见的错误
编译型错误
直接看错误提示信息 (双击), 解决问题。或者凭借经验就可以搞定。相对来说简单。
链接型错误
看错误提示信息,主要在代码中找到错误信息中的标识符,然后定位问题所在。一般是标识符名不存在或者拼写错误。
运行时错误
借助调试 ,逐步定位问题。
以上是关于C语言学习笔记实用的调试技巧的主要内容,如果未能解决你的问题,请参考以下文章
C语言初阶笔记程序员必须要会的实用调试技巧(含库函数strcpy和strlen的模拟实现)!!
C语言初阶笔记程序员必须要会的实用调试技巧(含库函数strcpy和strlen的模拟实现)!!