C语言学习|bug和调试优化代码

目录

调试

基本概念

bug

调试(debug)

调试步骤

Debug和Release

VS是集成开发环境(IDE)

调试的快捷键

调试窗口

监视

减少程序的错误

assert(表达式)

const + 变量


调试

基本概念

bug

虫子,bug引申为是计算机的漏洞。我们接触最早的bug应该是cf的卡墙bug吧。最早出现的bug是,1947年计算机发生故障,经过排查,在计算机的继电器触电里,找到了一只被夹扁的小飞蛾,这只小虫子卡住了机器的运行,顺手将飞蛾夹在工作笔记里,并诙谐的把程序故障称为“bug”。

调试(debug)

调试(Debug),又称除错,是发现和减少计算机程序或电子仪器设备中的程序

调试步骤

  1. 发现错误
  2. 用隔离或消除的方式对错误代码进行定位
  3. 确定错误产生的原因
  4. 提出错误代码修改方法
     

Debug和Release

Debug是调试版本,包含调试信息,方便程序员进行代码调试

Release是发布版本,对代码进行各种优化,使得程序在速度和大小是最优

VS是集成开发环境(IDE)

VS2019 VS2022都是IDE,是集成开发环境(IDE),包括编辑器,编译器和调试器

调试的快捷键

F5 启动调试,立刻跳到断点处

F9 设置断点,断点还可以点击灰色地带(灰色框)

 F5和F9配合使用,当代码执行到断点处,代码并不执行断点行,箭头指向printf时,但是不执行语句

F10 逐过程,遍历每个代码行。逐过程不会进入函数内部。

F11 逐语句,遍历每个代码语句。逐语句会进入函数内部,并且遍历语句

Ctrl+F5 不调试直接执行

调试窗口

监视

自动窗口

显示已经执行的代码的局部变量,监视的变量无法被修改,由调试器生成

局部窗口

显示执行代码语句的当前函数栈帧的局部变量,监视的变量无法被修改,由调试器生成

监视窗口

输入想要看到的的变量并且显示,监视的变量可以被修改,用户添加或删除

在局部函数中,数组退化成指针,查看数组只能查看第一个元素,要在监视窗口中输入: arr,n,n是数组的个数,查看数组后面多少个元素。

减少程序的错误

assert(表达式)

assert,断言,是assert.h库中的函数。assert中可以放入一个表达式,表达式的结果如果为假,就报错;如果为真,则跳过。

#include <assert.h> //导入assert函数

//strcpy函数复刻
void my_strcpy(char* dest, char* src)
{
	//断言
	//assert中可以放入一个表达式,表达式的结果如果为假,就报错,如果为真跳过
	assert(src != NULL);
	while (*dest++ = *src++)
		;
}

int main()
{
	char str1[20] = { 0 };
	char str2[] = "hello baby!";
	char* p = NULL;
	my_strcpy(str1, p);
	printf("%s\n", str1);
	return 0;
}

运行结果

const + 变量

const+变量是保护该变量不被修改,只能读取,不能修改。

1. const 修饰非指针变量(int,char,float...)

const 保护变量不被修改,只能读取

int main()
{
    const int a = 10;
    const char b = 'a';
    //a = 5; //报错
    //b = 'c'; //报错
    printf("%d %c",a,b); //可以正常读取
    return 0;
}

2. const 修饰指针变量

const修饰指针变量分为两种情况

a)  const 在 * 的左边

有两种形式,一种是 const int * pa,另外一种形式是 int const * pa, 两种形式不一样的写法,但const都在*的左边。都是保护指针变量指向的值不被修改,可以修改指针的指向,但不可以修改指针的指向的值

int main()
{
	int num = 10;
	const int* pa; 
    int const * pb; //pa和pb的写法,作用一样
	pa = &num; //可以修改指针pa的指向
	//*pa = 4; //报错
	return 0;
}

b)  const 在 * 的右边

一种形式,int* const pa。保护的是指针的指向不被修改,可以修改指针的值,但不能修改指针的指向

int main()
{
	int num = 10;
	int num1 = 5;
	int* const pa = &num; //pa的指向无法被修改,但可以修改pa指向的值
	//pa = num1; //报错
	*pa = 6;
	printf("%d", num);
    return 0;
}

猜你喜欢

转载自blog.csdn.net/DADONGOOO/article/details/128033681