張標(biāo)漢
摘要:程序設(shè)計(jì)課程的教學(xué)過程中要向?qū)W生講授程序調(diào)試技術(shù),學(xué)生掌握了程序調(diào)試技術(shù)后就能夠更好地理解程序設(shè)計(jì)的有關(guān)概念、自己解決程序運(yùn)行時(shí)出現(xiàn)中的問題。程序調(diào)試技術(shù)有助于幫助學(xué)生保持對(duì)程序設(shè)計(jì)課程的興趣,進(jìn)而促進(jìn)程序設(shè)計(jì)課程的教學(xué),提升教學(xué)效果。
關(guān)鍵詞:程序設(shè)計(jì);調(diào)試技術(shù);課程教學(xué)
中圖分類號(hào):G642.0 文獻(xiàn)標(biāo)志碼:A 文章編號(hào):1674-9324(2017)29-0196-02
一、引言
程序設(shè)計(jì)課程是計(jì)算機(jī)相關(guān)專業(yè)的專業(yè)基礎(chǔ)課,學(xué)生對(duì)該課程的學(xué)習(xí)掌握情況將直接影響其對(duì)后續(xù)諸多課程的學(xué)習(xí)。因此,各高校對(duì)該課程的教學(xué)都相當(dāng)重視,選配了教學(xué)經(jīng)驗(yàn)豐富、工作認(rèn)真負(fù)責(zé)的教師承擔(dān)該類課程的教學(xué)。同時(shí),各高校都不同程度地支持授課教師開展針對(duì)程序設(shè)計(jì)課程的教學(xué)改革,探索適應(yīng)本校學(xué)生特點(diǎn)的教學(xué)模式,試圖通過教學(xué)改革、探索出更為有效的教學(xué)方法來幫助學(xué)生激發(fā)學(xué)習(xí)興趣、提高學(xué)習(xí)成績(jī)、為后續(xù)課程的學(xué)習(xí)打下堅(jiān)實(shí)基礎(chǔ)。我們?nèi)鲗W(xué)院信息工程學(xué)院對(duì)C語言程序設(shè)計(jì)課程的教學(xué)改革也在探索之中,該項(xiàng)教學(xué)改革探索從2011年開始已經(jīng)堅(jiān)持了6年,一定程度上提高了學(xué)生的程序設(shè)計(jì)水平,但也發(fā)現(xiàn)一些問題。我們?cè)诮虒W(xué)過程中發(fā)現(xiàn),學(xué)生的程序調(diào)試能力亟待提高,我們需要對(duì)學(xué)生進(jìn)行程序調(diào)試技術(shù)的針對(duì)性訓(xùn)練,以進(jìn)一步提高教學(xué)效果。
二、講授和學(xué)習(xí)調(diào)試技術(shù)的必要性
有調(diào)查表明,教師在程序設(shè)計(jì)課中主要講授問題分析的有10.62%,主要講授算法分析的有23.01%,主要講語法結(jié)構(gòu)的占61.95%,強(qiáng)調(diào)程序調(diào)試技巧的只占4.42%。我們學(xué)院在《C語言程序設(shè)計(jì)》課程上的教學(xué)也有相似的情況,在教學(xué)中教師和學(xué)生都強(qiáng)調(diào)對(duì)問題的分析、算法的設(shè)計(jì)以及程序設(shè)計(jì)語法知識(shí)的講授和學(xué)習(xí),而忽視了對(duì)程序設(shè)計(jì)中的調(diào)試技術(shù)的講授和學(xué)習(xí)。這就造成學(xué)生在學(xué)習(xí)程序設(shè)計(jì)過程中當(dāng)程序運(yùn)行出現(xiàn)問題時(shí)往往不知錯(cuò)誤在哪里、也就不知道應(yīng)該如何解決程序運(yùn)行時(shí)出現(xiàn)的問題。我們?cè)诮虒W(xué)過程中發(fā)現(xiàn),學(xué)生在完成程序設(shè)計(jì)練習(xí)過程中的錯(cuò)誤主要是編譯錯(cuò)誤和邏輯錯(cuò)誤。對(duì)于編譯錯(cuò)誤,編譯器能夠給出提示,這樣的錯(cuò)誤學(xué)生都能夠很好地自己解決。而對(duì)于邏輯錯(cuò)誤,我們的學(xué)生因?yàn)椴欢绦蛘{(diào)試技術(shù)對(duì)很多的邏輯錯(cuò)誤問題都不知如何尋找錯(cuò)誤位置,往往對(duì)該類錯(cuò)誤一籌莫展,坐等教師來幫忙解決問題,從而形成了依賴教師來解決邏輯錯(cuò)誤。這對(duì)于學(xué)生的程序設(shè)計(jì)能力的提高相當(dāng)不利,進(jìn)而影響教學(xué)效果。我們知道,程序設(shè)計(jì)課程是一門實(shí)踐性很強(qiáng)的課程,需要投入大量的時(shí)間進(jìn)行練習(xí),但如果在練習(xí)過程中遇到問題不會(huì)解決,會(huì)導(dǎo)致學(xué)生自信心喪失,以至于對(duì)程序設(shè)計(jì)課程的學(xué)習(xí)失去興趣。因此,在程序設(shè)計(jì)課程中有意識(shí)地、系統(tǒng)地教會(huì)學(xué)生程序調(diào)試技術(shù)、讓學(xué)生學(xué)會(huì)自己解決問題是很有必要的。
三、通過調(diào)試技術(shù)學(xué)習(xí)程序設(shè)計(jì)
調(diào)試技術(shù)有助于我們的教學(xué),不僅能夠幫助學(xué)生找到邏輯錯(cuò)誤,而且能夠幫助我們向?qū)W生更為直觀地講授相關(guān)的概念,幫助學(xué)生理解這些概念。在程序設(shè)計(jì)課程的學(xué)習(xí)中,有一些概念的理解對(duì)于初學(xué)程序設(shè)計(jì)的學(xué)生來說是抽象和困難的,比如變量、數(shù)組、函數(shù)、作用域、指針等概念。在學(xué)習(xí)程序設(shè)計(jì)過程中,學(xué)生通過調(diào)試其所編寫的程序能夠看到程序的執(zhí)行過程,從而理解程序的3種基本結(jié)構(gòu)是如何執(zhí)行的、函數(shù)是如何調(diào)用的、指針是如何指向另一個(gè)變量等,使得學(xué)生真正從數(shù)據(jù)在內(nèi)存中的表現(xiàn)的層次來理解程序,進(jìn)而幫助學(xué)生理解程序的本質(zhì),引導(dǎo)學(xué)生在出現(xiàn)問題時(shí)從內(nèi)存的角度來分析問題的原因,更快地找到問題的源頭,進(jìn)而解決程序出現(xiàn)的問題。
1.常用的調(diào)試技術(shù)。在程序設(shè)計(jì)過程中,通過調(diào)試程序?qū)W生可以了解程序執(zhí)行的過程。常用的調(diào)試技術(shù)主要有設(shè)置斷點(diǎn)、單步執(zhí)行、觀察變量的內(nèi)存地址和值的變化、進(jìn)入函數(shù)內(nèi)部執(zhí)行以觀察函數(shù)的調(diào)用過程等。其中斷點(diǎn)的設(shè)置又有多種,分為條件斷點(diǎn)、地址斷點(diǎn)等。在教學(xué)過程中,教師提供對(duì)調(diào)試技術(shù)的講授要使學(xué)生能夠使用最簡(jiǎn)單的方法查看關(guān)鍵語法,在調(diào)試時(shí)設(shè)置斷點(diǎn)進(jìn)行調(diào)試,指導(dǎo)學(xué)生在調(diào)試中運(yùn)用單步執(zhí)行進(jìn)行調(diào)試,能夠在調(diào)試中運(yùn)用輸出關(guān)鍵信息進(jìn)行檢查錯(cuò)誤。
2.調(diào)試技術(shù)幫助理解數(shù)組的概念。剛接觸程序設(shè)計(jì)課程的學(xué)生對(duì)數(shù)組的理解是存在一定困難的,學(xué)生對(duì)數(shù)組是一段連續(xù)的空間、數(shù)組的初始化、數(shù)組的訪問、數(shù)組的下標(biāo)越界等,尤其是對(duì)數(shù)組名是個(gè)地址的理解都或多或少地存在困難。所有這些知識(shí)的理解如果不借助調(diào)試技術(shù)想把它們都解釋清楚都會(huì)有一定的困難,而通過調(diào)試程序、讓學(xué)生看看內(nèi)存里面是個(gè)什么樣則能夠很好地幫助學(xué)生理解它們。
3.調(diào)試技術(shù)幫助理解函數(shù)參數(shù)的傳遞。函數(shù)是程序設(shè)計(jì)中另一個(gè)難以理解的概念,在函數(shù)中涉及的參數(shù)傳遞方式、函數(shù)的調(diào)用、遞歸函數(shù)的調(diào)用等也是一個(gè)教學(xué)難點(diǎn)。通過程序調(diào)試技術(shù)直觀地查看函數(shù)的調(diào)用過程,了解函數(shù)參數(shù)傳遞過程和局部變量的概念。借助程序調(diào)試技術(shù)可以讓學(xué)生更加深入地理解參數(shù)傳遞時(shí)的傳值、傳引用和傳地址的區(qū)別,以及函數(shù)的調(diào)用包括遞歸函數(shù)的調(diào)用。
比如,對(duì)于如下一段程序:
int main()
{
int i,j;
i = 1;j = 2;
swap(i,j);
return 0;
}
對(duì)于函數(shù)的傳值調(diào)用程序:
void swap(int a,int b)
{
int c;
c = a;a = b;b = c;
}
從watch窗口我們可以發(fā)現(xiàn)實(shí)參和形參的地址是不同的,從而能夠解釋傳值調(diào)用時(shí)的特點(diǎn):數(shù)據(jù)傳遞時(shí)是復(fù)制了一份副本的。如圖1、2所示,在main函數(shù)中調(diào)用swap(i,j)時(shí)傳遞過去的變量i,j的地址是0X0012ff7c和0X0012ff78,而在實(shí)際執(zhí)行swap(a,b)時(shí),參數(shù)a,b的地址是0X0012ff24和0X0012ff28,這就說明傳值調(diào)用時(shí)是復(fù)制副本來進(jìn)行的,因此該swap函數(shù)并不能實(shí)現(xiàn)將i,j的值交換過來。
而對(duì)于函數(shù)的傳引用程序:
void swap(int &a,int &b)
{
int c;
c = a;a = b;b = c;
}
從watch窗口可以發(fā)現(xiàn),傳引用調(diào)用時(shí)形參和實(shí)參的地址是相同的,因此在函數(shù)調(diào)用完成后兩個(gè)變量的值也就能夠交換過來。
四、結(jié)束語
調(diào)試技術(shù)是學(xué)習(xí)程序設(shè)計(jì)課程必須要向?qū)W生講授的基本技能,學(xué)生掌握了程序的調(diào)試技術(shù)后就能夠在遇到問題時(shí)通過調(diào)試程序來尋找其中的錯(cuò)誤,從而找到解決問題的辦法,這有助于學(xué)生保持對(duì)程序設(shè)計(jì)的興趣,進(jìn)而促進(jìn)我們的教學(xué)。
參考文獻(xiàn):
[1]劉應(yīng)成.新升本科院校學(xué)生程序調(diào)試能力的調(diào)查研究[J].現(xiàn)代計(jì)算機(jī)(專業(yè)版),2010,(05):120-122.
[2]張秀美,趙旭霞.程序調(diào)試技術(shù)在C語言函數(shù)教學(xué)中的應(yīng)用[J].教育教學(xué)論壇,2014,(11):85-86.
Abstract:In the course of programming,we should tell the students how to debug the program. Using the program debugging technique,the students can understand the concept of programming better,and they can solve the running problems of the program better. Debugging technique can help students to maintain interest of programming,and promote the teaching of programming courses,improve teaching effect.
Key words:Programming;Debugging Technique;Course Teaching