【参考课程:B站 BV1Vm4y1r7jY】
目录
什么是bug?
调试
调试Debugging\Debug:又称除错,是发现和减少计算机程序或电子仪器设备中程序错误的过程
调试的基本步骤
- 发现程序错误的存在 //发现bug的三类人:程序员、测试人员、用户
- 以隔离、消除等方式对错误进行定位
- 确定错误产生的原因
- 提出纠正错误的解决办法
- 对程序错误予以改正,重新调试
debug和release的介绍
Debug-调试版本:包含调试信息,并且不作任何优化,便于程序员调试程序
Release-发布版本:往往是进行了各种优化,使得程序在代码大小和运行速度上都是最优的,以便用户更好地使用
Debug包含调试信息,Release进行了各种优化
∴Release文件大小相对更小一些
Windows环境调试介绍
#基于Visual Studio 2022
1.调试环境的准备
设置为Debug版本
2.常用调试快捷键
#直接按F1~F12不响应--按fn
fn键 -辅助功能键
F5
启动调试,经常用来直接跳到下一个断点处(逻辑上的下一个断点) //常与F9配合使用
F9
创建断点\取消断点
可以在程序的任意位置设置断点--这样就可以使得程序在想要的位置随意停止执行,进而一步步执行下去
#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
int main()
{
int i = 0;
int arr[10];
//赋值
for (i = 0; i < 10; i++)
{
scanf("%d", &arr[i]);
//%d定义了scanf的存入类型为整数,scanf遇到空格自动拆分
//∴一次性输入以空格分隔的所有元素即可通过循环+scanf给数组赋值了
}
//打印
for (i = 0; i < 10; i++)
{
printf("%d ", arr[i]);
}
return 0;
}
Ctrl + F9 -禁用断点:保留断点标记但断点不起作用
Alt + F9, C -条件断点:
F10
逐过程,通常用来处理一个过程,一个过程可以是一次函数调用,或者是一条语句
F11
逐语句,即每次都执行一条语句。可以使执行逻辑进入函数内部
#F10与F11的区别:F10不会进入调用的函数内部,F11能进入函数内部
//早期的编译器F11支持调节库函数,现目前的多数不支持
Ctrl + F5
开始执行不调试,即让程序直接运行起来而不调试就可以直接使用
*VS中常用的快捷键
3.调试的时候查看程序当前信息
在程序调试起来后窗口中才能看见选项:
※监视的小技巧-数组
如何写出好的代码(易于调试的代码)
#优秀代码的特质:
//代码运行正常 //bug少 //效率高 //可读性高 //可维护性高 //注释清晰 //文档齐全
assert() 函数
//assert( )函数作用 -如果它的条件返回错误,则终止程序执行
const 关键字
//const关键字作用 -用来定义常量。如果一个变量被const修饰,那么它的值就不能再被改变
※const修饰指针变量:
- const放在*左边
const int* p; int const* p; //以上两种写法等价,const修饰*p→意思是p指向的对象不能通过p来改变 //即:*p=100(赋值)ERROR! //但p变量本身可改变!!! //(这里假设原本p=&a):p=&n CORRECT!
const放在*右边
int* const p; //const修饰p→意思是变量p不可改变!//(这里假设原本p=&a):p=&n ERROR! //但p指向的对象可以通过p改变 //即:*p=100(赋值)CORRECT!
在*两边都放上const →两头都被限制