vc环境 C语言调试技巧

vc环境 C语言调试技巧,第1张

一.首先是关于Debug 和 Rlease的介绍

Debug通常为调试版本 它包含调试信息 并且不做任何优化  便于程序员调试程序
Release称为发布版本 它往往是进行了各种优化,使得程序在代码大小和运行速度上都是最优的,以便用户很好的使用
test.c  ->  .exe 可执行程序
Debug   ->  Debug版本的可执行程序         可以调试的,因为文件中包含了调试信息
Release ->  Release版本的可执行程序       不能进行调试

既然知道了Release版本会对Debug版本进行了一些优化

那么Release版本相对于Debug版本进行了那些优化呢?

下面有一个例子能够很好的介绍
Debug版本下面代码为死循环
Release版本下面代码打印13行hehe

int main()
{
	int i = 0;
	int arr[10] = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };
	for (i = 0; i <= 12; i++)
	{
		printf("hehe\n");
		arr[i] = 0;
	}
	system("pause");
	return 0;
}

 分析死循环原因 :
1.main函数中i和数组arr都是局部变量,局部变量是在栈上存储的,而栈区默认先使用高地址处的空间,再使用低地址的空间,并且数组随着下标增长,地址是由低到高变化

2.当出现越界访问数组时,就有可能越界访问到i的地址,然后改变数组的时候,将i改变,从而导致死循环

int main()
{
	int i = 0;//由于上面的原因  如果改变定义i和数组arr的顺序就不会出现死循环  但是仍会报错 不建议越界
	int arr[10] = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };
	//VC6.0 环境下 <= 10 就死循环   说明内存布局空间不同
	//gcc 编译器   <= 11 就死循环
	//VS2013       <= 12 就死循环
	printf("%p\n", arr);//Debug版本i的地址高于数组arr地址   Release版本优化之后数组arr地址高于i的地址
	printf("%p\n", &i);
	//for (i = 0; i <= 11; i++)
	//{
	//	printf("hehe\n");
	//	arr[i] = 0;
	//}
	system("pause");
	return 0;
}

二.学会快捷键
 F5  启动调试,经常用来直接调到下一个断点处(执行逻辑的下一个断点)。   要和F9配合使用
 F9  创建断点和取消断点  断点的重要作用,可以在程序的任意位置设置断点。这样就可以使得程序在想要的位置随意停止执行,继而一步步执行下去。  设置断点
 F10 逐过程,通常用来处理一个过程,一个过程可以是一次函数调用,或者是一条语句。
 F11 逐语句,就是每次都执行一条语句,但是这个快捷键可以使我们的执行逻辑进入函数内部(这是最常用的)。
 CTRL + F5   开始执行不调试,如果你想让你的程序直接运行起来而不调试就可以直接使用。

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/langs/866769.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-12
下一篇 2022-05-12

发表评论

登录后才能评论

评论列表(0条)

保存