浅谈调试技术在非计算机专业的C语言程序设计教学中的应用

时间:2022-10-09 05:20:40

浅谈调试技术在非计算机专业的C语言程序设计教学中的应用

摘要:“C语言程序设计”是一门非计算机专业大学生必修的专业基础课,但在实际教学课堂中,对一些概念如变量的补码、指针变量、函数的嵌套调用与递归调用,学生普遍反映概念抽象难以理解。针对这种问题,提出了一种基于Visual Studio 2013调试工具的教学方法。通过单步调试的“慢动作回放”,使学生能够直观地看到计算机底层所表示的内容。经过课堂实践证明,这种方法实现起来简单、方便,并且可以达到很好的教学效果。

关键词:非计算机专业;C语言程序设计;调试工具;VS2013

中图分类号:G642.0 文献标志码:A 文章编号:1674-9324(2016)42-0177-02

一、引言

“C语言程序设计”课程对非计算机专业的理工科学生来说,是一门非常重要的基础课程,但相比于其他程序设计语言,C语言初学起来十分困难。其主要原因是:(1)C语言数据类型和运算符多,表达式复杂;(2)初学者在学习过程中暂时不能使用机器思维。为了使学生学习好“C语言程序设计”这门课程,许多教育工作者对教学方法进行了深入的探索,积累了丰富的教学经验[1-3]。尽管如此,如何使学生能更好地掌握C语言程序设计仍然值得教育工作者进一步探索。本文准备从调试的目的和任务入手,给出若干程序设计和调试的技巧,使学生更好地掌握C语言程序设计。

学习调试之前需要弄清楚两个问题:为什么要调试?怎样去调试?从英文单词debug上可以看出,调试的本意是“解除程序中的错误(bug)”。为了能对程序进行查错和改错,就有必要对程序的局部进行专门的分析,观察程序的运行过程。这样做的另一个好处是辅助程序员对C语言语法进一步地理解。

二、Visual Studio 2013的调试工具在C语言程序设计教学中的使用

1.使用Memory和Watch探析简单变量。

对于C语言中的如下程序段

int main() {int a = -1;float b = 100.625;return 0;}

通过F10单步跟踪程序,在执行return语句之前,通过在watch窗口输入&a获得了变量a的地址,在本例中为:0x0046f890,得到图1,其内容为十六进制的FF FF FF FF,它对应的十进制数为:-1,这样可以使学生理解负数补码的作用。

在watch窗口中输入&b获得了变量b的地址,在本例中为:0x0046f884,得到图2,其内容为十六进制的42 C9 40 00,它对应的十进制数为100.625,这样可以使学生对单精度浮点数的编码格式有一个直观的了解。

2.使用Memory和Watch理解字符串。字符串在C语言中是以字符数组形式存储的,并以‘\0’作为结束标志。对于如下代码段:

char string[10] =”bbbbb”;

通过在Watch窗口获得的string值为0x0031fe90,则得到字符串的首地址,在Memory中加以查看,结果如图3。

在图中,从0x0031fe90到0x0031fe96处四个字节的内容分别为0x62,0x62,0x62,0x62,0x62,0x62,十六进制的62对应十进制的98,而98为字符b的ASCII码,0为’\0’的ASCII码,通过该图,学生可以直观地看到字符在内存中是如何以ASCII码形式存储的,并且C语言字符串又是如何以‘\0’为结束标志的。

3.使用Memory和Watch理解指针。指针和指针变量在C语言程序设计教学中属于重点和难点。在教学中,学生经常容易混淆两者的概念。指针代表变量的地址,指针变量用于存放地址。通过Memory查看内存情况,可以使学生对地址产生感性的认识,对内存分布情况有直观的印象。对于如下的代码:

char ch = ‘b’,* p = NULL;p = &ch;

通过在内存中查看p的内容,可以看到它的值为,正好与ch的地址相同。除上述内容外,还可以使用同样的方法对结构体和结构体成员,共用体和共用体成员之间的关系进行解析,使学生对构造类型在计算机内存中是如何分布的有一定直观的了解。

4.使用Call Stack查看函数调用堆栈。函数的嵌套调用与递归调用在教学中属于难点,学生对函数的调用顺序经常感到迷惑,通过VS 2013的Call Stack图形化工具,可以形象直观地展示函数的调用过程。对于如下的代码段:

#include <stdio.h>

void funb() {printf("This is funb!\n");}

void funa() {funb();}

int main(){funa();return 0;}

Call Stack工具可以清晰地显示出函数a与函数b的调用顺序,通过逐语句的执行,学生对函数嵌套调用能产生直观的印象。对于函数的递归调用,学生在学习汉诺塔程序时即使清除递归调用的概念,但对程序中函数的调用过程仍会产生疑惑,同理,递归调用也可以使用Call Stack工具进行演示,通过调用关系图与代码之间的对比分析,学生就可以对函数递归调用的调用顺序有所了解。

三、结语

由于C语言程序设计设计课程中的有些概念比较抽象,比较底层,不易为非计算机专业的学生所理解。在使用VS 2013的调试工具后,可以将这部分内容在计算机内的实现方法直观地展示给学生。本文提出了使用VS 2013调试工具进行C语言程序设计辅助教学的方法,并辅以若干实例论证此方法,并在实际教学过程中得到了证实。

参考文献:

[1]张玉春,孙大元.C语言程序设计教程[M].北京:清华大学出版社,2013.

[2]孙大元,张玉春.C语言程序设计实验指导与习题解析[M].北京:清华大学出版社,2013.

[3]谢红霞,罗国明,吴红梅.基于程序调试的C程序设计教学与实践[J].信息技术,2011,(11):174-176.

Application of Debugging Technique in C Language Programming Teaching of Non-computer Major

WANG Yang

(Jilin University Public computer teaching and research center,Changchun,Jilin 130012,China)

Abstract:"C programming language" is a required professional course for non-computer major college student,but in the actual teaching in the classroom,some concepts such as variables complement,pointer variables,function of nested calls and recursive calls,Students generally reflect the concept is too abstract to understand.For this problem,This paper proposes a teaching method based on Visual Studio 2013 debugging tools.By step through the slow-motion replay,it makes students able to visually see the content of underlying computer.Through classroom practice proof,this method is simple,convenient and can achieve good teaching effect.

Key words:non-computer major;C programming language;debugging technique;VS2013

上一篇:浅谈滨海休闲体育旅游的开发 下一篇:中医药院校制药工程专业实践教学的改革与实践