1.调试的基本步骤 a.发现程序错误的存在 b.以隔离、消除等方式对错误进行定位 c.确定错误产生的原因 d.提出纠正错误的解决办法 e.对程序错误予以改正,重新测试
2.debug和release debug通常称为调试版本,它包含调试信息,并且不作任何优化,便于程序员调试程序。 release称为发布版本,往往进行了各种优化,使得程序在代码大小和运行速度上都是最优的,以便用户很好的使用。
3.VScode常用调试快捷键 F5-启动调试,经常用来直接调到下一个断点处; F9-创建断点和取消断点,断点的重要性:可以在程序的任意位置设置断点,这样就可以使程序在想要位置停止执行,继而一步步执行下去; F10-逐过程,通常用来处理一个过程,一个过程可以是一次函数调用,也可以是一条语句 F11-逐语句,就是每次都执行一条语句,这个快捷键可以使执行逻辑进入函数内部(这是常用的); Ctrl+F5-开始执行不调试,可以让程序直接运行而不调试。 调试时可以查看程序当前的信息: 查看临时变量的值; 查看内存信息; 查看调用堆栈; 查看汇编信息; 查看寄存器信息;
4.如何写出易于调试的代码 常见coding技巧: a.使用assert b.尽量使用const c.养成良好的编码风格 d.添加必要的注释 e.避免编码的陷阱 eg:
#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
#include<assert.h>
//字符串拷贝
void my_strcpy(char* dest, const char* src)
{
assert(dest != NULL);//断言-保证指针有效性
assert(src != NULL);
//将src指向的字符串拷贝到dest指向的空间,包含'\0'
while (*dest++ = *src++)
{
;
}
}
int main()
{
char arr1[] = "#############";
char arr2[] = "hello";
my_strcpy(arr1, arr2);
printf("%s\n", arr1);
return 0;
}
5.常见错误分类 a.编译型错误 直接看错误提示信息,解决问题,相对简单; b.链接型错误 看错误提示信息,主要在代码中找到错误信息中的标识符,然后定位问题所在,一般是标识符名不存在或拼写错误; c.运行时错误 借助调试,逐步定位问题,最难处理。