目录
windows环境调试(VS2022)所有的编译器都是大同小异
什么是bug?
导致计算机不能正常运作,正常运行的东西
程序由程序员来编写,检查问题,然后交给测试人员,在进行一轮检查,最后才会面向用户使用
所以每个程序猿都应该擅长于使用调试,用来解决问题
调试的基本步骤
1.发现程序错误的存在
2.以隔离,消除等方式对错误进行定位
3.确定错误产生的原因
4.提出纠正错误的办法
5.程序错误予以改正,重新测试
Debug 和 Release的介绍
Debug(调试版本): 包含调试信息,并且不作任何优化,便于程序员使用
Release(发布版本):往往会进行各种优化,使得程序在代码大小和运行速度都是最优的,便于用户很好的使用
windows环境调试(VS2022)所有的编译器都是大同小异
学会快捷键
F5 :启用调试,经常跳到下一个断点处
F9:创建断点和取消断电,在程序的任意位置设置断点,以提高效率
F10:逐过程,通常用来处理一个过程,一个过程可以是一次函数调用,或者是一条语句
F11:逐语句,每次执行一条语句,可以使执行逻辑进入函数内部(一般都会使用F11)
F10不会进入子函数内部会直接得结果
调试时查看程序当前信息
调试起来,程序中有值之后,然后点击“调试” ——> "窗口"——>"监视"或”内存“或”调用堆栈“ 或反汇编或寄存器等
注:只要调试起来,这些才会出现
1.查看临时变量得值
(1)监视:
“自动窗口”:将程序中的一些变量自动放入窗口中让我们观察
“局部变量”:将上下文环境中的局部变量自动放入窗口中
“监视”:手动输入想观察的数据,监视可以打开四个窗口
(2)内存:
一列表示一个字节的数据,以十六进制显示的
(3)调用堆栈:
显示外部代码可以看到外部函数调用关系,不用编译器调用main函数也会有所不同
(4)反汇编:
可以看到C语言代码被翻译成什么样的汇编(在不同的编译器汇编不一样),该代码在底层的实现原理
(5)寄存器:
查看寄存器信息(也可以监视查看寄存器)
使用调试,解决代码中的bug
例:
int main()
{
int i = 0;
int arr[10] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};
for(i = 0; i <= 12; ++i)
{
arr[i] = 0;
printf("nxbw\n");
}
return 0;
}
运行之后:
可以看到运行后,就变成了死循环
为什么不会变成这样?
1.main是一个函数,它开辟空间需要调用堆栈,可以看到main函数中的数据,全部都是使用的栈区资源,栈区是向下增长的,栈区的内存使用规则是先使用高地址,在使用低地址
2.数组在内存中是连续储存的,随着下标的增加,地址由低到高
3.由于i创建在数组arr之前,所有i先使用了栈区中的高地址区,即:数组运用越界操作就可能到导致访问到i,造成死循环
编程常见的错误
1.编译错误(语法错误)
2.链接错误(链接错误,出现在链接期间)
3.运行时错误(调试解决)