Program Debug (Midterm reflections on algorithms)--- --- (害,感觉这篇文章本身就是Bug)

emmm有关小测验呢,xiao经过了好好的反思,其中有一道题写出来了,但是一直死循环,并且,,,不知道当时怎么想的竟然觉得是oj评判错了,额,毕竟,其中有一道题它确实是错了。。。

针对这个问题,一定要深刻反思,想了想其实还是自己不注重调试(Debug),一直都没学过调试,觉得没用,肯定用不到,但别人可能花费很长时间调试的,emmm感觉是自己一直以来都没改掉的问题,太过相信自己,所以,从现在开始,好好学调试,去Debug叭~

做个程序员该做的事叭hhh~


程序调试

一、

使用高级计算机语言,如C、C++、Java,编写的程序,都需要经过编译器编译或解释,才能转化成机器能够识别并能执行的二进制代码

然而,即使我们付出了很多的精力和时间,编写出来的程序还是总有这样那样的问题,因此需要反复修改代码才能实现最终目标

本篇文章的目的介绍四种常用的C编辑器,并利用编辑器提供的调试功能来调试程序,从而修改程序中的错误

如何一步步的跟踪代码找到问题搞明白为何程序不能正常运行,这个过程称为调试程序

①手工跟踪能够有效的帮助初学者找到bug出在什么位置,消除bug,让程序正常运行。

②自动化的工具同样也能够帮助你跟踪程序,尤其当程序很复杂时效果更加明显,这种工具叫做调试器

调试器能够让运行中的程序根据你的需要暂停,查看程序怎么运作的
有些调试器是以命令行的形式工作的,大部分调试器都具备好的图形界面,调试器能够方便的帮助你看到所有变量的状态。

调试器并不能解决程序中出现的问题,它仅仅是一种帮助调试程序的工具

(1):首先,应该运用手中的纸和笔分析程序搞清到底怎么回事
(2):其次,一旦确定错误大致出在什么位置,便可以用调试器观察程序中特定变量的值,从而找到错误并改正错误。

二、

常用C语言编辑器

IDE(Integrated Development Environment) 集成开发环境,是专门用于程序开发环境的应用程序,一般包括代码编辑器编译器调试器图形用户界面工具。就是集成了代码编写功能、分析功能、编译功能、调试功能等一体化的开发软件套件。如微软的VisualStudio系列,Borland的C++ Builder等。该程序可以独立运行,也可以和其它程序并用,除此之外还有很多C语言的IDE。

IDE为用户使用高级编程语言提供了很多方便
C的IDE非常多,对于学习C语言的朋友而言,用什么IDE可能并不重要,重要的是学习C语言本身,不过,会用一款自己习惯的IDE进行程序的编写和调试确实很方便。以下我们将依次介绍四种常见的C语言IDE。

(1)Dev-C++:Dev-C++是一个Windows环境下C/C++的集成开发环境,它是一款自由软件遵守GPL许可协议分发源代码。它集合了MinGW等众多自由软件,并且可以取得最新版本的各种工具支持

Dev-C++是NOI、NOIP等比赛的指定工具,缺点是调试功能弱。(这点就跟那啥了哈哈哈哈)

(2)VisualStudio:MicrosoftVisual Studio(简称VS)是美国微软公司的开发工具包系列产品。VS是一个基本完整的开发工具集,它包括了整个软件生命周期中所需要的大部分工具,如UML工具代码管控工具集成开发环境等等。

(3)Eclipsefor C:Eclipse是一个开放源代码的、基于Java可扩展开发平台。就其本身而言,它只是一个框架和一组服务,用于通过插件组件构建开发环境。幸运的是,Eclipse附带了一个标准的插件集 ,包括Java开发工具(Java Development Kit,JDK)。

(4)Code::Blocks:Code::Blocks是一个开源、免费、跨平台(支持Windows、GNU/Linux、Mac OS X以及其他类UNIX)、支持插件扩展的C/C++集成开发环境Code::Blocks纯粹的C++语言开发完成,它使用了著名的图形界面库wxWidgets(2.6.2 unicode)版

三、

程序调试

(1)命令行基础

(2)输入输出控制

(3)批处理文件

(4)断点与单步调试

①如何利用Dev C++进行单步调试
ps:xiao用的是 Dev-C++ 5.11版本的

xiao的示例:
注意,因为编译错误比较好判断,所以在这里我只演示逻辑错误的样例

首先,题外话,关于dev显示语言,可以随时更改工具>环境选项>基本>语言,在语言的那一栏选择Chinese或者English就可以了hhhh随你~~

捂脸) xiao 用的是中文版
Program Debug (Midterm reflections on algorithms)--- --- (害,感觉这篇文章本身就是Bug)_第1张图片

在编写程序时通常有两种错误,一种是编译错误,一种是逻辑错误,编译错误系统会自动显示,在哪里错了之类的,然后逻辑错误,就是可能语法对了,但是你的思路或者在实现思路的代码中小细节可能有问题,这就需要大家学会单步调试,一步步的运行,从而发现逻辑错误的具体位置,再进行修改。

那么,开始啦~

1.首先大家要新建一个源代码,左上角 文件>新建>源代码
或者是直接在快捷方式里面有一个图标(如下所示),是新建源代码;
Program Debug (Midterm reflections on algorithms)--- --- (害,感觉这篇文章本身就是Bug)_第2张图片
或者直接键盘 ctrl+n ,新建一个源代码;

2.然后大家可以随意写一个代码,我这里故意写错,来给大家示范单步调试哈~
在写的时候,如果觉得字体太大或者太小不方便观看,可以在 工具>编辑器选项>显示>大小 (如下图) 这里,设置字号;
或者是直接 ctrl+鼠标滑轮 通过向上向下滑来改变字体大小
Program Debug (Midterm reflections on algorithms)--- --- (害,感觉这篇文章本身就是Bug)_第3张图片

3.咱们假设就来演示一个求阶乘的幂的程序叭~

错误代码:

#include 
int main()
{
	int sum=1,i,n;
	scanf("%d",&n);
	for(i=1;i<n;i++)
		sum=sum*i;
	printf("%d!=%d\n",n,sum); 
	return 0;  //返回0 
}

咱们标准的在网上提交代码的时候呢,一定要注意,main方法呢,前面是 int ,然后呢,程序最后,有个 return 0; 因为网上提交代码是通过这个0状态来判断你的程序是否正常结束的

然后我们保存一下,咳咳,保存在上栏也有一个快捷图标;
注意:保存的时候,咱们一定要建一个自己的目录,专门放你的 C 程序,那我们假设 就叫做 Xiao’s debugging sample.c 叭~
ps: .cpp是C++的扩展名, .c是C的扩展名,我们改成 .c 。
Program Debug (Midterm reflections on algorithms)--- --- (害,感觉这篇文章本身就是Bug)_第4张图片
hhh然后我们直接编译运行啦,发现,,4!=6;很显然,这是不对的,然后我们其实就可以看出来是i

单步调试呢,需要我们设断点,断点怎么设呢?我们需要在左侧的一列,点一下就可以了,会发现他这一行会变成绿色,来点一下我们想要到的那一步,或者一步一步的检查,咱们看看哈~
Program Debug (Midterm reflections on algorithms)--- --- (害,感觉这篇文章本身就是Bug)_第5张图片
可以一次设置多个断点,也就出现好几个绿色行,可以可以嘿嘿嘿。
当然,大家不要学我,我上面这张图只是让大家看是什么效果,结果,,一不小心就断电在了输入行,没法输入可不行啊,汗,emmm不要设在输入的这一行,如果想看是否输入正确的话,那就设在输入的下一行,然后点击调试,就可以输入了,之后 … … 往下看。

1.添加变量名字查看
2.设置断点
断点的作用就是当调试时代码运行到断点将会停止下来 等待你下一步指令再继续运行
3.调试

即:
1.点下面的添加查看(查看变量里面的数是否是我们心里设定的):Program Debug (Midterm reflections on algorithms)--- --- (害,感觉这篇文章本身就是Bug)_第6张图片
2.再按我说的设置断点:
Program Debug (Midterm reflections on algorithms)--- --- (害,感觉这篇文章本身就是Bug)_第7张图片
3.点击“调试”,就可以啦,然后之后就更改就可以啦~
Program Debug (Midterm reflections on algorithms)--- --- (害,感觉这篇文章本身就是Bug)_第8张图片

emmm感觉好难写这个,汗,这样叭,我把思路,还有位置都已经给大家了,然后还有基本的思想也写了,我又看了看好像还有别的顺序,大家自己试一试叭,emm其实我自己还是有点小迷糊,但是我发现,不管顺序是什么,我现在是可以达到效果的,就是可以查看哪一步哪一步的变量是多少
心满意足了。。。
大家也要好好练习啊

咳咳,并且,我发现一个讲Debug的很好的博客,推荐给大家
emmmCaprYang

捂脸)写了这么多,感觉没啥用,hhh别打我,大家一起尝试嘛哈哈哈

你可能感兴趣的:(Program Debug (Midterm reflections on algorithms)--- --- (害,感觉这篇文章本身就是Bug))