Debug和Release介绍

Posted 张同学吧

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Debug和Release介绍相关的知识,希望对你有一定的参考价值。

Debug 通常称为调试版本,它包含调试信息,并且不作任何优化,便于程序员调试程序。
Release 称为发布版本,它往往是进行了各种优化,使得程序在代码大小和运行速度上都是最优的,以便用户很好地使用。 代码:

#include<stdio.h>
int checkData(int* p)

	char tmp = 0;

	int i;
	for (i = 0; i < 5; i++)
	
		tmp |= 1 << p[i];
		//tmp每次或上一位1,p[i]如果是1~5都有,则1<<1到1<<5都或上的结果将会是00111110,如果有并列,则一定会至少却其中一个1,结果就不会是00111110,所以可以判断tmp最终的结果是不是这个数字来判断有没有重复。
	
	return tmp == 0x3E;

void diveRank(int* p, int n)

	if (n >= 5) //此时的n是用来控制循环层数的。
	
		if ((p[1] == 2) + (p[0] == 3) == 1 && //B第二,我第三
			(p[1] == 2) + (p[4] == 4) == 1 && //我第二,E第四
			(p[2] == 1) + (p[3] == 2) == 1 && //我第一,D第二
			(p[2] == 5) + (p[3] == 3) == 1 && //C最后,我第三
			(p[4] == 4) + (p[0] == 1) == 1 && //我第四,A第一
			checkData(p)) //查重
		
			for (int i = 0; i < 5; i++)
			
				printf("%d ", p[i]);
			
			putchar('\\n');
		
		return;
	

	for (p[n] = 1; p[n] <= 5; p[n]++)
	
		diveRank(p, n + 1); //通过递归模拟多层循环,每进一次递归相当于进了一层新的循环。
	

int main()

	int p[5];
	diveRank(p, 0);
	return 0;


我们可以看到,release版本的可执行程序比debug小很多。所以我们说调试就是在Debug版本的环境中,找代码中潜伏的问题的一个过程。变量在内存中开辟的顺序发生了变化,影响到了程序执行的结果,这就是优化。
要想成为程序员就要多多动手,尝试调试,才能有进步。一定要熟练掌握调试技巧。初学者可能80%的时间在写代码,20%的时间在调试。但是一个程序员可能20%的时间在写程序,但是80%的时间在调试。多多使用快捷键,提升效率

int main()

	 int i = 0;
	 int sum = 0;//保存最终结果
	 int n = 0;
	 int ret = 1;//保存n的阶乘
	 scanf("%d", &n);
	 for(i=1; i<=n; i++)
	 
		 int j = 0;
		 for(j=1; j<=i; j++)
		 
		 	ret *= j;
		 
		 sum += ret;
	 
	 printf("%d\\n", sum);
	 return 0;

-首先推测问题出现的原因。初步确定问题可能的原因最好。
-实际上手调试很有必要。
-调试的时候我们心里有数。
我们通过调试来逐渐缩小问题的范围。上面实例中,很有可能是在循环语句出现了问题。所以我们在scanf语句处打一个断点。

在i=3,j=1时,本来ret应该是从1开始乘,但是此时的ret却是从2开始的(大家可以亲自去调试感受一下),所以这就是bug。那么我们期待的是,ret从每一次循环开始都被重置为1.所以我们应该在第一层for循环内加上 int ret = 1;
我们再执行一次就可以发现结果正确了
优秀的代码:

  • 代码运行正常

  • bug很少

  • 效率高

  • 可读性高

  • 可维护性高

  • 注释清晰

  • 文档齐全
    常见的coding技巧:

  • 使用assert:判断字符串是否为NULL,如果为NULL会弹框

  • 尽量使用const:

const修饰指针变量的时候:

const如果放在* 的左边,修饰的是指针指向的内容,保证指针指向的内容不能通过指针来改 变。但是指针变量本身的内容可变。
const如果放在* 的右边,修饰的是指针变量本身,保证了指针变量的内容不能修改,但是指 针指向的内容,可以通过指针改变

  • 养成良好的编码风格
  • 添加必要的注释
  • 避免编码的陷阱

加油,代码人!

以上是关于Debug和Release介绍的主要内容,如果未能解决你的问题,请参考以下文章

delphi debug release区别是什么?

delphi debug release区别是什么?

POPTEST老李谈Debug和Release的区别(c#)2

delphi debug release区别是什么?

vs中debug和release版本的区别

android studio release和debug的区别