以调试技术引领程序设计思维的培养

2022-06-11 08:38付喜梅
电脑知识与技术 2022年13期
关键词:调试技术思维培养程序设计

摘要:调试技术是计算机语言课程学习中修正程序的重要手段,更是监测程序执行过程的有效途径。文章以程序设计中调试技术为视角,从程序设计中常见的错误出发,讨论了面对过程程序设计与面向对象程序设计中调试技术方法,通过调试程序的过程,让学生掌握程序的组织结构,明白程序的执行路径及运行机制,从而学会程序设计的思维方式,最终提高学生的编程能力。

关键词:调试技术;计算机语言;程序设计;思维培养

中图分类号:G642     文献标识码:A

文章编号:1009-3044(2022)13-0178-00

计算机语言经历了机器语言、汇编语言、高级语言几个阶段,高级语言从程序的组织形式又可分为面向过程和面向对象,具体语言种类有几十种。程序设计课程不仅是学习编程语言的知识,更重要的是逻辑思维的培养,学习分析问题和解决问题的方法,即程序设计思维的培养。随着计算机软硬件技术的不断更新,必然会产生更先进的计算机语言,在这种形势下需要帮助学生建立学习程序设计语言的思维模式,把计算机语言的指令语法知识、程序组织结构、调试程序的技术等内容学习形成一套学习思维体系,从而在后续的计算机语言课程学习过程中可以“嫁接移植”,帮助学生快速掌握一门新的计算机语言,以便学生在快速发展的计算机领域里可持续发展。

调试技术是沟通理论课和实验课的桥梁[1],是学习计算机语言课程中重要的环节。调试程序不仅可以改正错误使程序正确运行,更重要的是直观监测每条指令的执行结果,掌握程序设计的组成结构以及程序执行路径。本文以程序设计中调试技术为视角,从程序设计中常见的错误出发,讨论了面对过程程序设计与面向对象程序设计中调试技术方法,重点通过程序的调试过程,让学生掌握程序的组织架构,明白程序的执行机制原理,从而学会程序设计的思维方式,最终提高学生的编程能力。

1 程序设计中常见的错误

高级编程语言根据执行机制不同可分成两类:静态语言和脚本语言,静态语言采用编译方式将源代码转换成目标代码再执行,脚本语言采用解释方式将源代码逐条转换成目标代码再逐条执行。例如:C语言、Java语言是静态语言,Python语言、JavaScript语言是脚本语言。无论是编译型语言还是解释型语言都是将源代码转换成目标代码再执行的过程,在程序设计中主要有编辑源程序、编译程序、链接执行程序三个步骤,具体过程如图1所示。

(1)编辑源程序:字符是构成程序的基本单位,在很多高级语言采用的字符集都是ASCII码或者Unicode编码,因此一般任何文本编辑器都可以用編辑源程序,只不过在高效的程序设计中用的都是集编辑器、编译器(解释器)、链接执行器一体的集成开发平台,VC就是C语言程序设计非常优秀一个集成开发平台,Eclipse是JAVA语言程序设计非常实用的平台。

(2)编译/解释源程序:在静态语言中把编辑好的源程序一次性地翻译为目标代码再执行,而脚本语言利用解释程序一边翻译一边执行目标代码,类似于同声传译。

(3)链接执行目标代码程序:首先加载链接系统相关资源,形成完整的目标代码再执行,再输入数据即可得到输出的结果。

在程序设计的三个步骤中,编辑程序时若有语法错误,编译就通不过,程序不能进入运行阶段;若在加载链接相关资源不正确,则程序运行就会出错;程序运行后得出不正确的结果,这时说明程序逻辑语义表达出错,因此根据错误产生的时机可以抽象分为三类错误:语法错误、运行错误和逻辑错误。

1.1 语法错误

一门计算机语言是一套人与计算机交流的指令集合,与自然语言相似,有词汇、语法、句法、语句组织规则,编写程序就像写文章,做项目就像编写一本书[2]。语法错误是指编辑源程序时输入不符合语法规则而产生的错误,导致程序编译通不过,程序也不能进入运行阶段。通常,编译器对源程序进行编译的过程中,会把检测到的语法错误以提示的方式列举出来,因此语法错误又称为编译错误。初学者对语法规则记忆不牢,编写不熟练,经常出现诸如表达式不完整、缺少必要的标点符号、标识符和关键字拼写错误、数据类型不匹配、循环语句或选择语句的语法结构错误、没有区分大小写等语法错误[3]。在集成开发平台编译时,都能非常详细罗列出错的位置及原因,给改正程序提供很大便利。

1.2 运行错误

运行错误发生在程序编译成功后,进行加载链接外部资源后运行时出现错误,导致程序被迫终止。此类错误主要是加载链接外部资源不成功,例如文件名拼写错误或路径错误导致打不开文件、写入数据的文件磁盘空间不够、数据库连接错误、数组的越界访问等。此类错误发生时,集成开发平台会根据错误情况给出比较精确的提示信息。在VC编译C语言程序时,若出现里面函数的包含文件写错或是调用的函数名写错时,经常出现链接运行错误;在Eclipse集成平台编写Java程序时,导入的包写错或调用的类名拼写错误也会在运行时发生异常提示。

1.3 逻辑错误

逻辑错误是指程序编译运行时都没有出现错误,也有运行结果,但结果不正确,从某种意义上说,计算机并不认为“有错”,犹如写了一篇文章但文不对题,显然失去了程序功能的意义。逻辑错误是程序设计中最难查找的错误,必须了解程序的功能及程序逻辑组织结构才能改正程序错误,此种错误集成开发平台没有办法报错,不在考查程序处理异常范围之内,必须了解程序的功能及程序逻辑组织结构才能改正程序。出现这种错误通常是对程序功能理解不正确、组织程序的逻辑结构不对,例如:使用了不正确的变量,指令的次序错误、循环的条件不正确程序设计的算法考虑不周全等,有时逻辑错误也会附带产生运行错误。逻辑错误在集成开发平台中没有错误显示,出错位置及原因是排错的难点,是调试程序的重中之重。

2 程序设计课程中程序调试思维的培养

针对前面程序中错误如何进行调试,以达到程序的功能,通常有两个步骤:静态检查和动态检查。首先,按照程序的逻辑组织结构进行静态检查,即人工检查,主要检查语法错误及程序逻辑组织结构,犹如写好一篇文章自己先阅读一遍看是否有错字或不通顺的地方。动态检查即利用集成开发平台软件进行编译运行检查,若有语法错误,则在编译阶段就会提示有错误,根据错误提示修改即可,编译通过了进入链接阶段,最后通过输入不同的数据验证程序的正确性。在实际编写程序过程中,应用集成开发平台进行动态检查、调试程序是最主要的手段,语法错误和运行错误都有精确的错误位置及提示,尤其是出现逻辑错误时,动态检查可以利用集成开发软件具体到每条指令的执行结果,通过观察变量的变化,排查程序编写错误的原因。

在前面阐述的三类错误中,语法错误和链接错误通过集成开发平台可以获得错误的具体位置和原因,只要按照提示信息进行修改即可。逻辑错误在计算机看来是“没有错误”的,是程序设计中最难排查的错误。在日常程序设计课程学习时,通常先用静态检查的方法按照程序结构的逻辑语义进行排查,另一种最重要的手段就利用集成开放平台提供调试工具进行调试程序,按照程序的执行路径,通过观察变量值的变化,排查指令逻辑语义描述的正确性。这两种方法都需要对程序的组织结构非常清晰,熟悉程序执行路径及执行原理才能进行逻辑错误的排查。

广义上讲,一个程序可以用两种方法组织:一是围绕过程,二是围绕数据。面向过程的程序设计最典型是C语言程序设计,面向对象的程序设计最具代表是Java程序设计、Python语言。无论面向过程的程序设计,还是面向对象的程序设计,调试思维都是一致的,在动态检查中基于冯·诺依曼计算机执行存储程序原理,了解程序执行的顺序过程,在集成开发平台中有单步调试、断点调试、跳跃式调试等调试方法,其调试的技巧及思维过程是完全一致的,在调试程序时还可以利用输出语句,输出中间结果,判断程序执行情况,下面分别以C语言和Java语言讲述面向过程程序设计和面向对象程序设计中的调试思维策略。

2.1 面向过程程序的调试方法

程序设计就是把解决问题的过程应用计算机语言的指令集表达出来,即是从键盘里输入信息A通过计算机的处理得到想要的结果信息B的过程[2]。每种语言的源程序都有指令的组织模式,函数是构成C程序最基本的单位,一个C程序由若干源程序文件组成,每个源程序文件由一个或多个函数及其他相关内容组成,所有的源文件中仅有一个主函数main[4];图2即是一个C程序的基本编写格式。

冯·偌依曼思想计算机工作原理都是存储程序,程序运行时,所有的源程序编译链接成一个整体调入内存中,一条一条取出来执行,C语言程序的执行总是从main函数开始,在main中结束,其他的函数只能被main调用执行。若在C程序中出现语法错误或是运行错误,在VC集成开放平台中通过编译链接两个步骤就会在输出窗口中一行一个错误列举出错误的位置和原因,在错误行上双击,即可跳转到源程序错误的位置,再依据提示信息修改即可。若出现逻辑错误,就要启动debug技术调试程序,图3是VC平台调试程序的界面。常用的调试方法有单步运行、运行光标处、设置断点或几种方法综合等调试措施,此处不讨论调试技巧,这些在具体教学时逐一演示示范,也可以录制调试程序技巧相关视频给学生学习,无论哪种调试方法或几种方法综合,都是依据程序执行路径中变量的值是否按照预定轨迹变化来判断程序逻辑语义是否正确,因此,掌握程序的架构及运行过程才能学会程序设计的思维方式。

2.2 面向对象程序的调试方法

面向对象程序设计中,把客观世界看作是由对象组成,对象中具有相同静态属性和动态属性特征抽象出来,用统一计算机语言来表示,即面向对象中的类[5]。从计算机语言发展历程来看,面向对象的语言是将面向过程中变量的和函数按相关性进行归类,绑定到操作的数据(即对象)上,用计算机语言描述就是类。类是面向对象编程语言基本组成单位,一个Java语言的应用程序可以由若干源文件组成,每个源文件是由若干类组成,Java程序的所有代码都存放在类中,类是Java的基本封装单位[6],但所有源文件的类中有且仅有一个main方法,它是程序的入口和出口,图4就是一个典型的Java语言源程序的组织结构。

面向对象语言程序的执行原理也是冯·诺依曼思想,在面向对象程序中也有程序的入口和出口。在Java语言中,main方法即是程序入口和出口,由于面向对象的基本组成单元是类,因此Java应用程序的执行过程首先是找到Main方法所在的类,加载包含main方法的类,并按照程序书写先后顺序执行类的静态方法,再执行main方法。main方法既是程序的入口,也是程序的出口,其他类的变量和方法被main方法引用和调用。在Eclipse集中开发平臺中,可以检测语法错误和运行错误,语法错误在编辑程序时就能实时提示,并在本行首部出现打叉标志,同时还会有修改建议,而运行错误则是以异常的形式来通知。逻辑错误即程序语义错误,平台无法查错,也只能通过debug调试程序。在Eclipse平台中,程序的调试方法及技巧也与VC平台一致,有单步、断点等调试方法,特别注意的是,面向对象语言中组成程序的基本单元是类,因此在源程序中按下ctrl+t即可查看整个程序的组织结构关系,还可以了解程序组成元素,在Eclipse平台调试情况如图5所示。

3 结束语

本文探讨了程序设计过程中的调试技术,通过调试思维反向引领学生学习计算机语言序列课程,培养学生建立程序设计的思维模式,快速学习新的计算机语言,帮助学生在计算机行业可持续发展,也为计算机语言序列课程实践教学中如何引导组织教学提供一种思路。

参考文献:

[1] 王楠,赵占芳.调试技术在程序设计实验教学中的应用探讨[J].教育现代化,2017,4(7):46-47,53.

[2] 付喜梅.关于计算机语言教学的探讨[J].电脑知识与技术,2018,14(10):121-123,132.

[3] 李莫凡.C++程序中的常见错误和解决方法[J].电子技术与软件工程,2016(6):252.

[4] 谭浩强.C程序设计教程[M].北京:清华大学出版社,2007.

[5] 张海藩,牟永敏.软件工程导论[M].6版.北京:清华大学出版社,2013.

[6] 沈泽刚.Java语言程序设计[M].3版.北京:清华大学出版社,2018.

【通联编辑:唐一东】

猜你喜欢
调试技术思维培养程序设计
基于Visual Studio Code的C语言程序设计实践教学探索
从细节入手,谈PLC程序设计技巧
高职高专院校C语言程序设计教学改革探索
变电设备安装调试与运行维护技术
高中物理探究性学习思维的培养
数学习题讲练中学生思维培养的认识与实践
PLC梯形图程序设计技巧及应用