VS实用调试技巧

常在写代码,哪有不出bug。

今天给大家介绍一些VS的实用调试技巧,话不多说,直接看内容。

目录

BUG?

调试

什么是调试

调试的基本步骤

Debug和Release的介绍

Windows环境调试介绍

调试环境

 常用的快捷键

调试的时候查看程序当前信息

监视我们的变量

查看我们的内存

优秀的代码

常见的coding技巧

示范

const修饰指针

const放在*左边

const放在*右边

*左右都有const

BUG?

bug英文意思是臭虫,也就是出现在我们程序中不好的东西,例如程序所执行的结果和我们想要的不一样,或者程序执行过程中占用了大量的资源,并且这些都是可以避免的,这个时候就需要我们去找bug了,怎么去找Bug呢?最好的方式就是调试了。

调试

什么是调试

调试 (英语: Debugging / Debug ),又称除错,是发现和减少计算机程序或电子仪器设备中程序 错误的一个过程。

调试的基本步骤

1.发现程序错误的存在
2..以隔离、消除等方式对错误进行定位
3.确定错误产生的原因
4.提出纠正错误的解决办法
5.对程序错误予以改正,重新测试

DebugRelease的介绍

Debug和Release分别是两个版本

Debug:Debug是我们的调试版本,中间记录了我们程序的运行过程各个变量的变化情况,Debug是我们写程序时候的一个版本。

Release:Release是我们的发布版本,它对代码进行了部分优化,让代码执行起来更加的简洁高效,通常在测试的时候运用的版本同样也是我们用户使用的版本。

下面我们介绍一个具体的例子来详细的了解二者之间的区别。

int main()
{
	int i = 0;
	int arr[10] = { 0 };
	for (i = 0; i <= 12; i++)
	{
		arr[i] = 0;
		printf("hehe\n");
	}
	return 0;
}

 上述代码在Debug下运行是一个死循环,但是在realse下就没有,这是因为release对代码进行了优化,那么优化在哪了呢?

上面图片是我们数组arr和变量i的存储位置,当我们对数组进行越界访问时会访问到我们i的地址,这时候我们的i=12,然后对其赋值,i=0了,这样我们的的程序就会陷入循环之中,而release对代码进行了优化,就不会出现这样的问题了。

Windows环境调试介绍

调试环境

 常用的快捷键

F9
创建断点和取消断点
断点 的重要作用,可以在程序的任意位置设置断点。
这样就可以使得程序在想要的位置随意停止执行,继而一步步执行下去。
注意:在我们创建断点的时候我们可以添加条件,这样就能让程序跳到指定的条件位置

 

我们可以看到此时程序直接执行到我们想要的循环位置了,可以大大节省我们的调试时间。 

F5
启动调试,经常用来直接跳到下一个断点处。
F10
逐过程,通常用来处理一个过程,一个过程可以是一次函数调用,或者是一条语句。
F11
逐语句,就是每次都执行一条语句,但是这个快捷键可以使我们的执行逻辑 进入函数内部 (这是最
长用的)

调试的时候查看程序当前信息

监视我们的变量

查看我们的内存

优秀的代码

1. 代码运行正常
2. bug很少
3. 效率高
4. 可读性高
5. 可维护性高
6. 注释清晰
7. 文档齐全

常见的coding技巧

1. 使用assert
2. 尽量使用const
3. 养成良好的编码风格
4. 添加必要的注释
5. 避免编码的陷阱。

示范

char* strcpy(char* dst, const char* src)//const修饰src不能改变
{
	char* cp = dst;
	assert(dst && src);//地址不能为空

	while (*cp++ = *src++);
	return(dst);
}

上述代码是我们模拟实现字符串复制的代码,其中我们用到了,assert,用以判断我们出错在哪里方便排查错误,const修饰提醒我们我们将要复制的字符串不能被改变。

上述就是一个比较优秀的代码,所以我们在写一些函数的时候要学会使用assert和const。

const修饰指针

const放在*左边

int main()
{
	int n = 10;
	int m = 20;
	const int*  p = &n;
	*p = 20;
	return 0;
}

 当const放在左边时,意思为const所指向对象的内容不能改变

int main()
{
	int n = 10;
	int m = 20;
	const int*  p = &n;
	p = &m;
	//*p = 20;
	return 0;
}

指向的对象是可以改变的。

const放在*右边

int main()
{
	int n = 10;
	int m = 20;
    int* const p = &n;
	p = &m;
	//*p = 20;
	return 0;
}

当const在右边时表示指针所指向的对象不能改变而内容可以改变。

int main()
{
	int n = 10;
	int m = 20;
    int* const p = &n;
	//p = &m;
	*p = 20;
	return 0;
}

*左右都有const

int main()
{
	int n = 10;
	int m = 20;
    const int* const p = &n;
	//p = &m;
	//*p = 20;
	return 0;
}

当两边都有const的时候无论是指针变量还是指针所指向的内容都是不能改变的。

  • 23
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 22
    评论
评论 22
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值