資源描述:
《程序調(diào)試優(yōu)化和出錯處》由會員上傳分享,免費在線閱讀,更多相關(guān)內(nèi)容在教育資源-天天文庫。
1、第16章程序調(diào)試、優(yōu)化和出錯處理程序調(diào)試的重要性毋庸置疑,有時調(diào)試工作所占用的時間甚至遠(yuǎn)超過程序設(shè)計、代碼編寫所用時間。MATLAB的程序調(diào)試功能強大,較之于VS、BC等更加簡潔、方便,具有更好的所見即所得特性,這些內(nèi)容將在第16.1節(jié)作詳細(xì)介紹。MATLAB程序是能夠完成指定功能的代碼集合,完成指定的功能當(dāng)然是程序的重要目標(biāo)之一,但往往還不是最重要的目標(biāo)。在資源(時間、內(nèi)存及其他相關(guān)設(shè)備資源)有限的條件下,決定程序質(zhì)量好壞的標(biāo)準(zhǔn)往往是程序的性能,當(dāng)然還包括程序界面等。程序的性能指標(biāo)主要是指完成指定功能所需的時間和內(nèi)存。第16.2節(jié)中給出了一些MATLAB程序優(yōu)化應(yīng)該遵循的原則及要注
2、意的事項,這些都可以在某種程度上提高MATLAB程序性能。另外本節(jié)還介紹了MATLAB的性能分析工具,利用該工具可以更客觀地度量程序的性能。16.1調(diào)試MATLAB是一種邊解釋邊執(zhí)行的程序語言,這為程序的調(diào)試提供了眾多的便利,尤其要強調(diào)的是其良好的所見即所得特性,更是VS、Eclipse等所不能比擬的。除了內(nèi)置的一系列調(diào)試函數(shù)之外,MATLAB還提供了專門的MATLAB調(diào)試器(即M文件編輯器),通過該調(diào)試器、結(jié)合調(diào)試函數(shù),用戶可以完成大部分的調(diào)試工作。本節(jié)首先介紹調(diào)試的基本任務(wù),接著詳細(xì)討論調(diào)試函數(shù)、MATLAB調(diào)試器及其相關(guān)的調(diào)試技術(shù),最后對MATLAB中的錯誤和警告及其相關(guān)的調(diào)試
3、技術(shù)進行了簡要介紹,它們在第16.3節(jié)出錯處理中有重要應(yīng)用。16.1.1調(diào)試的基本任務(wù)程序調(diào)試的概念源于英文術(shù)語“Debug”,意為找到、去除程序中的“bug”(bug可以簡單地理解為錯誤)。對大部分程序,可能存在的bug可以大致分為如下三類。語法錯誤邏輯錯誤異常語法錯誤是由于程序員疏忽等原因而造成代碼違背程序語言規(guī)則,這是初學(xué)者經(jīng)常犯的一類錯誤。一般地,編譯器能夠找到大部分的語法錯誤,MATLAB編譯器更是如此,在某種程度上這是由于MATLAB語言較C++、Java等語法相對簡單的緣故。邏輯錯誤主要是由于程序員對問題求解的程序流程或程序語言本身特性認(rèn)識有誤差而造成程序執(zhí)行結(jié)果(包括
4、中間結(jié)果)出現(xiàn)錯誤。一般來說,編譯器對這類錯誤無能為力,MATLAB編譯器也不例外。邏輯錯誤也是大部分程序調(diào)試的主要工作。16.1.2調(diào)試函數(shù)MATLAB內(nèi)置了一系列的調(diào)試函數(shù),用于程序執(zhí)行過程相關(guān)的顯示、執(zhí)行中斷、斷點設(shè)置、單步執(zhí)行操作等。通過在MATLAB命令窗口輸入以下指令:>>helpdebug用戶可以查詢到這些調(diào)試函數(shù),它們均以db開頭,Debug函數(shù)及其說明函數(shù)名功能dbstop設(shè)置斷點dbclear清除斷點dbcont重新執(zhí)行dbdown變更本地工作空間上下文dbmex使MEX文件調(diào)試有效dbstack列出函數(shù)調(diào)用關(guān)系dbstatus列出所有斷點dbstep單步或多步執(zhí)
5、行dbtype列印M文件(包括行號)dbup變更本地工作空間上下文dbquit退出調(diào)試模式16.1.3MATLAB調(diào)試器但前面利用MATLAB調(diào)試函數(shù)對MATLAB程序進行調(diào)試還有一些不足之處:不夠簡便,需要輸入過多的調(diào)試代碼;不夠直觀;對具有多重函數(shù)調(diào)用的大型程序不使適用。用戶也許希望擁有像VS類似的、具有圖形用戶界面的調(diào)試器,為此MATLAB提供了專門的MATLAB程序調(diào)試器,該調(diào)試器很好集成在M文件編輯器之中,具有良好的所見即所得特性,操作控制簡單方便,功能強大,下面將為用戶詳細(xì)介紹其特性及使用方法。MATLAB調(diào)試器集成在文件編輯器的調(diào)試工具欄,包括7個調(diào)試按鈕和一個空間堆棧
6、下拉框,16.1.4警告和錯誤MATLAB程序在執(zhí)行過程中若遇到語法錯誤或異常,則會拋出錯誤或警告。錯誤和警告信息中包含了錯誤和警告發(fā)生的代碼行行號,由此可以迅速地找到MATLAB程序中的語法錯誤或異常,下面通過一個簡單的例子說明警告、錯誤相關(guān)的除錯技術(shù)。16.2性能優(yōu)化廣義上來說,程序性能的范疇不僅包括程序的時間效率(即執(zhí)行效率)和空間效率(主要指內(nèi)存使用效率),還涉及程序的穩(wěn)定性、可靠性、適應(yīng)性等多種指標(biāo)。但本節(jié)僅討論狹義的程序性能,即程序的執(zhí)行效率和內(nèi)存使用效率,及相關(guān)的性能優(yōu)化技術(shù)。從理論上分析程序的性能不是本節(jié)所要討論的內(nèi)容,這里首先介紹MATLAB的程序性能分析工具Pro
7、filer,用以衡量程序的性能,并在后續(xù)的內(nèi)容中驗證相關(guān)性能優(yōu)化技術(shù)的效果;隨后的兩節(jié)分別討論執(zhí)行效率優(yōu)化和內(nèi)存優(yōu)化相關(guān)的技術(shù)。16.2.1性能分析查找程序性能瓶頸是提升程序性能的第一步。MATLAB提供的碼表(stopwatch)能夠給出指定代碼運行的時間,通過比較不同代碼的運行時間,用戶可以粗略分析程序的性能。下面是碼表的一個簡單使用示例,通過該例子可以很容易地理解碼表的使用方法。16.2.2效率優(yōu)化技術(shù)一般地,用戶在初次編寫代碼時,不需要過多地考慮效