C语言第9讲(调试)

Debug 和 Release

Debug 为调试版本,程序中会有调试文件,运行时速度没有优化,文件体积对于Release版本过于

庞大

Release 为发布版本,是用户平常使用的版本,有优化运行速度,和缩减文件体积

调试

调试的环境准备

确认为Debug版本

调试的快捷键

F9:创建断点 和 取消断点

        断电的作用:可以使程序执行到想要的位置暂停执行

F5:启动调试,常用来直接跳跃到下一个断点处(常与F9搭配使用)

        F5 与 ctrl+F5的区别

        F5:不是用于运行程序的,是用于调试程序的

        ctrl+F5:直接运行,不调试

问题:连按3次F5,会直接结束调试吗?

不会for循环语句会在代码行 7,8,9,来回执行,所以断点处于的代码行9会停多次

代码行左侧红点代表为断点,可以按F9生成,或右击生成

可以右击代码进入条件断点,设置达成什么条件,才停止执行

F10:逐过程(一个代码一个代码执行)一个过程可以是函数调用,或者一条语句(不能进入函数内部)

F11:逐语句,每次执行一条语句,但可以进入函数内部

shift+F5:退出调试

监视:方便观察变量或内存中的值

名称可以放变量,表达式,地址

数组名是首元素地址

问题:求 1 !+2!+3!+4!+...10! 的和,请看下⾯的代码出现是什么问题:

#define _CRT_SECURE_NO_WARNINGS 
#include <stdio.h>

int main()
{
	int i = 0;
	int j = 0;
	int sum = 0;
	int ret = 1;
	for (i = 1; i <= 3; i++)
	{
		for (j = 1; j <= i; j++)
		{
			ret *= j;
		}
		sum += ret;
	}
	printf("%d\n", sum);
	return 0;
}

由于 ret 没有重置所以,在计算3的阶乘时,ret 会带上2的阶乘继续*1*2*3=12

修正后

#define _CRT_SECURE_NO_WARNINGS 
#include <stdio.h>

int main()
{
	int i = 0;
	int j = 0;
	int sum = 0;
	int ret = 1;
	for (i = 1; i <= 3; i++)
	{
		ret = 1;
		for (j = 1; j <= i; j++)
		{
			ret *= j;
		}
		sum += ret;
	}
	printf("%d\n", sum);
	return 0;
}

在这串代码的基础上可以进行优化如下

        计算1到n的阶乘

        1*1是1的阶乘

        1*1*2是2的阶乘

        在计算n的阶乘时这些都会出现

        在过程中加上就行

#define _CRT_SECURE_NO_WARNINGS 
#include <stdio.h>

int main()
{
	int i = 0;
	int sum = 0;
	int ret = 1;
	for (i = 1; i <= 3; i++)
	{
		ret *= i;
		sum += ret;
	}
	printf("%d\n", sum);
	return 0;
}

问题:处于Debug 和 x86环境下时下面代码会发生什么情况?

#define _CRT_SECURE_NO_WARNINGS 
#include <stdio.h>
int main()
{
	int i = 0;
	int arr[10] = { 1,2,3,4,5,6,7,8,9,10 };
	for (i = 0; i <= 12; i++)
	{
		arr[i] = 0;
		printf("hehe\n");
	}
	return 0;
}

运行结果:为死循环打印 "呵呵"

原因:

1. 栈区内存的使⽤习惯是从⾼地址向低地址使⽤,所以变量i的地址较⼤。arr数组的地址⼩于i的地址

2. 数组在内存中的存放是:随着下标的增⻓,地址是由低到⾼变化

变量i 和 数组arr 总是空2个整形吗?

不一定,是看环境的

vc.6.0 为连续存放

gcc 中间空1个整形

编程常⻅错误归类

1 编译型错误(ctrl+F7只进行编译)

        编译型错误⼀般都是语法错误

2 链接型错误

        • 标识符名不存在

        • 拼写错误

        • 头⽂件没包含

        • 引⽤的库不存在

3.运行时错误

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值