调试技巧(vs2022 C语言)
调试之前首先要保证我们的脑袋是清晰的,我们调试的过程主要是看代码有没有按照我们的想法去运行
调试最常使用的几个快捷键
F5
启动调试,经常用来直接跳到下一个断点处(F5通常和F9配合使用,打了断点按F5程序可以直接运行到断点处,这样提高了调试效率)
F9
创建断点和取消断点(可以在程序的任意位置设置断点,这样可以让程序在随意的位置停止执行,继而一步步执行下去)
按F5后直接运行到17行(这样就不用手动让for循环一次次走完了)
(可以在调试框监视你想看的变量)
中间带加号的是条件断点,可以右击鼠标进行设置条件,只有满足条件才运行到这个断点
F10
逐过程,通常用来处理一个过程,这个过程可以是一次函数调用或者是一条语句。
F11
逐语句,即每次执行一条语句,但是这个快捷键可以使我们的执行逻辑进入函数的内部(这是最常用的)
F10和F11有区别,F11可以进到Add函数内部(但是现在的编译器一般不支持调试库函数),F10不会,所以F11更加细致
Ctrl+F5
直接执行不调试
自动窗口会自动把程序的变量信息显示
监视窗口可以打开多个
a,4可以看到4个元素
a,10可以看见10个元素
还可以查看内存
调试可以看函数堆栈,反汇编,寄存器等
调试练习:
这段代码是死循环,通过调试的方法发现问题
已经越界访问了,但是可以改arr[10]的值,hehe也正常打印
但是改完arr[12]后,i又会变回0,这样子循环往复,变成死循环
i在变的时候arr[12]也在变,并且值变化相同,说明他们在同一块空间上
vs arr和i之间是两个空间,但是不同的编译器可能不同
用assert要包含头文件
实例理解:
要学会写优秀的代码
str只是提供元素的内容,不需要被改变,用const修饰能让代码更加健壮
避免传过来的是空指针可以加上assert进行判断
链接性错误可以通过查找(Ctrl+F)发现错误
运行时错误是编译和链接都没问题,但是结果有问题或者其他情况,这个要通过调试解决问题