版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
1、技術(shù)凝聚實力技術(shù)凝聚實力專業(yè)創(chuàng)新出版專業(yè)創(chuàng)新出版第16章 程序調(diào)試、優(yōu)化和出錯處理l程序調(diào)試的重要性毋庸置疑,有時調(diào)試工作所占用的時間甚至遠(yuǎn)超過程序設(shè)計、代碼編寫所用時間。MATLAB的程序調(diào)試功能強(qiáng)大,較之于VS、BC等更加簡潔、方便,具有更好的所見即所得特性,這些內(nèi)容將在第16.1節(jié)作詳細(xì)介紹。lMATLAB程序是能夠完成指定功能的代碼集合,完成指定的功能當(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é)中給出了
2、一些MATLAB程序優(yōu)化應(yīng)該遵循的原則及要注意的事項,這些都可以在某種程度上提高M(jìn)ATLAB程序性能。另外本節(jié)還介紹了MATLAB的性能分析工具,利用該工具可以更客觀地度量程序的性能。技術(shù)凝聚實力技術(shù)凝聚實力專業(yè)創(chuàng)新出版專業(yè)創(chuàng)新出版16.1 調(diào)試lMATLAB是一種邊解釋邊執(zhí)行的程序語言,這為程序的調(diào)試提供了眾多的便利,尤其要強(qiáng)調(diào)的是其良好的所見即所得特性,更是VS、Eclipse等所不能比擬的。除了內(nèi)置的一系列調(diào)試函數(shù)之外,MATLAB還提供了專門的MATLAB調(diào)試器(即M文件編輯器),通過該調(diào)試器、結(jié)合調(diào)試函數(shù),用戶可以完成大部分的調(diào)試工作。l本節(jié)首先介紹調(diào)試的基本任務(wù),接著詳細(xì)討論調(diào)試函
3、數(shù)、MATLAB調(diào)試器及其相關(guān)的調(diào)試技術(shù),最后對MATLAB中的錯誤和警告及其相關(guān)的調(diào)試技術(shù)進(jìn)行了簡要介紹,它們在第16.3節(jié)出錯處理中有重要應(yīng)用。技術(shù)凝聚實力技術(shù)凝聚實力專業(yè)創(chuàng)新出版專業(yè)創(chuàng)新出版16.1.1 調(diào)試的基本任務(wù)l程序調(diào)試的概念源于英文術(shù)語“Debug”,意為找到、去除程序中的“bug”(bug可以簡單地理解為錯誤)。對大部分程序,可能存在的bug可以大致分為如下三類。語法錯誤l邏輯錯誤l異常l語法錯誤是由于程序員疏忽等原因而造成代碼違背程序語言規(guī)則,這是初學(xué)者經(jīng)常犯的一類錯誤。一般地,編譯器能夠找到大部分的語法錯誤,MATLAB編譯器更是如此,在某種程度上這是由于MATLAB語言
4、較C+、Java等語法相對簡單的緣故。l邏輯錯誤主要是由于程序員對問題求解的程序流程或程序語言本身特性認(rèn)識有誤差而造成程序執(zhí)行結(jié)果(包括中間結(jié)果)出現(xiàn)錯誤。一般來說,編譯器對這類錯誤無能為力,MATLAB編譯器也不例外。邏輯錯誤也是大部分程序調(diào)試的主要工作。技術(shù)凝聚實力技術(shù)凝聚實力專業(yè)創(chuàng)新出版專業(yè)創(chuàng)新出版16.1.2 調(diào)試函數(shù)lMATLAB內(nèi)置了一系列的調(diào)試函數(shù),用于程序執(zhí)行過程相關(guān)的顯示、執(zhí)行中斷、斷點設(shè)置、單步執(zhí)行操作等。通過在MATLAB命令窗口輸入以下指令:l help debugl用戶可以查詢到這些調(diào)試函數(shù),它們均以db開頭,Debug函數(shù)及其說明函 數(shù) 名功 能dbstop設(shè)置斷點
5、dbclear清除斷點dbcont重新執(zhí)行dbdown變更本地工作空間上下文dbmex使MEX文件調(diào)試有效dbstack列出函數(shù)調(diào)用關(guān)系dbstatus列出所有斷點dbstep單步或多步執(zhí)行dbtype列印M文件(包括行號)dbup變更本地工作空間上下文dbquit退出調(diào)試模式技術(shù)凝聚實力技術(shù)凝聚實力專業(yè)創(chuàng)新出版專業(yè)創(chuàng)新出版16.1.3 MATLAB調(diào)試器l但前面利用MATLAB調(diào)試函數(shù)對MATLAB程序進(jìn)行調(diào)試還有一些不足之處:l不夠簡便,需要輸入過多的調(diào)試代碼; 不夠直觀; 對具有多重函數(shù)調(diào)用的大型程序不使適用。l用戶也許希望擁有像VS類似的、具有圖形用戶界面的調(diào)試器,為此MATLAB提供
6、了專門的MATLAB程序調(diào)試器,該調(diào)試器很好集成在M文件編輯器之中,具有良好的所見即所得特性,操作控制簡單方便,功能強(qiáng)大,下面將為用戶詳細(xì)介紹其特性及使用方法。MATLAB調(diào)試器集成在文件編輯器的調(diào)試工具欄,包括7個調(diào)試按鈕和一個空間堆棧下拉框,技術(shù)凝聚實力技術(shù)凝聚實力專業(yè)創(chuàng)新出版專業(yè)創(chuàng)新出版16.1.4 警告和錯誤lMATLAB程序在執(zhí)行過程中若遇到語法錯誤或異常,則會拋出錯誤或警告。錯誤和警告信息中包含了錯誤和警告發(fā)生的代碼行行號,由此可以迅速地找到MATLAB程序中的語法錯誤或異常,下面通過一個簡單的例子說明警告、錯誤相關(guān)的除錯技術(shù)。技術(shù)凝聚實力技術(shù)凝聚實力專業(yè)創(chuàng)新出版專業(yè)創(chuàng)新出版16.
7、2 性能優(yōu)化l廣義上來說,程序性能的范疇不僅包括程序的時間效率(即執(zhí)行效率)和空間效率(主要指內(nèi)存使用效率),還涉及程序的穩(wěn)定性、可靠性、適應(yīng)性等多種指標(biāo)。但本節(jié)僅討論狹義的程序性能,即程序的執(zhí)行效率和內(nèi)存使用效率,及相關(guān)的性能優(yōu)化技術(shù)。l從理論上分析程序的性能不是本節(jié)所要討論的內(nèi)容,這里首先介紹MATLAB的程序性能分析工具Profiler,用以衡量程序的性能,并在后續(xù)的內(nèi)容中驗證相關(guān)性能優(yōu)化技術(shù)的效果;隨后的兩節(jié)分別討論執(zhí)行效率優(yōu)化和內(nèi)存優(yōu)化相關(guān)的技術(shù)。技術(shù)凝聚實力技術(shù)凝聚實力專業(yè)創(chuàng)新出版專業(yè)創(chuàng)新出版16.2.1 性能分析l查找程序性能瓶頸是提升程序性能的第一步。MATLAB提供的碼表(s
8、topwatch)能夠給出指定代碼運行的時間,通過比較不同代碼的運行時間,用戶可以粗略分析程序的性能。下面是碼表的一個簡單使用示例,通過該例子可以很容易地理解碼表的使用方法。技術(shù)凝聚實力技術(shù)凝聚實力專業(yè)創(chuàng)新出版專業(yè)創(chuàng)新出版16.2.2 效率優(yōu)化技術(shù)l一般地,用戶在初次編寫代碼時,不需要過多地考慮效率問題,而是將精力更多地放在程序的結(jié)構(gòu)、可讀性等方面,大部分的程序優(yōu)化工作是在程序性能分析之后完成的。本小節(jié)主要討論程序的時間效率優(yōu)化技術(shù),接下來的小節(jié)將討論內(nèi)存優(yōu)化技術(shù),當(dāng)然兩者在某些方面是重疊的。下面列出了一些讀者可以借鑒的效率優(yōu)化建議:l代碼向量化,即將for、while循環(huán)轉(zhuǎn)為矩陣的按位運算,
9、更詳細(xì)的內(nèi)容可以參考第7章7.3.5矩陣按位運算;l預(yù)分配足夠大的數(shù)組,而不是在for、while循環(huán)中增加數(shù)組的空間大??;l對不可避免且耗時很大的循環(huán)操作可以嘗試在MEX文件內(nèi)實現(xiàn),更詳細(xì)的內(nèi)容可以參考第20章;l盡量避免更改變量的數(shù)據(jù)類型或維數(shù),如有需要,建議事先創(chuàng)建一個新的變量;l盡量避免實數(shù)和復(fù)數(shù)之間的相互賦值;l盡量采用實數(shù)運算,對復(fù)數(shù)運算可以轉(zhuǎn)換為多個實數(shù)運算,由此能夠提升效率;l合理使用邏輯運算,注意&、|和&、|的差別,一般地,&、|具有更高的效率;l盡量采用函數(shù)而不是腳本文件,一般地函數(shù)文件的執(zhí)行效率要高于腳本;l盡量使用Load、Save而不是文件I
10、/O操作函數(shù)。 技術(shù)凝聚實力技術(shù)凝聚實力專業(yè)創(chuàng)新出版專業(yè)創(chuàng)新出版16.2.3 內(nèi)存優(yōu)化技術(shù)l一般地,用戶不需要過于關(guān)注MATLAB內(nèi)部的內(nèi)存操作,而且MATLAB對此提供的支持也較少,下面幾個是比較常用的內(nèi)存操作函數(shù):lwhos,用于查看當(dāng)前的內(nèi)存使用狀況;lclear,刪除某變量及其內(nèi)存空間,可以利用指令clear all刪除所有的變量;lsave,將某個變量以mat數(shù)據(jù)文件的形式存儲到磁盤中,該操作的目的通常是將暫時不用但占用內(nèi)存較多的數(shù)據(jù)暫時清出內(nèi)存,以備需要時使用;lload,將mat數(shù)據(jù)載入內(nèi)存空間。技術(shù)凝聚實力技術(shù)凝聚實力專業(yè)創(chuàng)新出版專業(yè)創(chuàng)新出版16.3 出錯處理l出錯處理經(jīng)常被程
11、序設(shè)計初學(xué)者所忽視,然而對一款優(yōu)秀的軟件來說,出錯處理所需的工作量往往比正常的程序流程還要多,而且更加具有技巧性和藝術(shù)性。出色的出錯處理是軟件穩(wěn)定性的保證。l本節(jié)首先介紹Try-catch查詢語句,該語句用于捕捉程序執(zhí)行過程中的錯誤和異常;第16.3.2節(jié)介紹MATLAB中一些常用出錯處理手段。這里讀者需要認(rèn)識到一個事實,即MATLAB本身支持的出錯處理手段是有限的(這主要是基于MATLAB語言的局限性),MATLAB內(nèi)置的出錯處理主要體現(xiàn)在報錯。要設(shè)計具有良好錯誤處理能力的MATLAB程序,需要發(fā)揮用戶的創(chuàng)造性。技術(shù)凝聚實力技術(shù)凝聚實力專業(yè)創(chuàng)新出版專業(yè)創(chuàng)新出版16.3.1 Try-catch
12、錯誤查詢l如果用戶預(yù)料到某段代碼可能引發(fā)異常,那么可以將該代碼段嵌入到try-catch語句中以捕獲該異常并采取適當(dāng)?shù)难a(bǔ)救措施。try-catch語句的基本語法如下。ltrylstatement1(可能引發(fā)異常的代碼段)lcatchlstatement2(出錯處理代碼)lend技術(shù)凝聚實力技術(shù)凝聚實力專業(yè)創(chuàng)新出版專業(yè)創(chuàng)新出版16.3.2 錯誤處理l出錯處理應(yīng)盡量將程序從錯誤中恢復(fù)出來,完成程序正常的功能;即便不能如此,程序也應(yīng)當(dāng)給用戶相應(yīng)的提示,以便于用戶采取進(jìn)一步措施,如手動除錯等。l錯誤恢復(fù)特定于不同的錯誤、不同的恢復(fù)任務(wù),沒有統(tǒng)一的規(guī)則可循;錯誤報告對大部分的程序是相似的。下面首先介紹錯誤報告的相關(guān)技術(shù),接著以一個簡單的例子介紹錯誤恢復(fù)。lMATLAB系統(tǒng)捕獲到程序執(zhí)行錯誤時,其默認(rèn)的處理方法是報告錯誤,并停止程序執(zhí)行流程,例如,在MATLAB命令窗口輸入以下代碼。l x = 2; y = 2x;技術(shù)凝聚實力技術(shù)凝聚實力專業(yè)創(chuàng)新出版專業(yè)創(chuàng)新出版16.4 小結(jié)l本章對MATLAB程序
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 二零二五年度農(nóng)村房屋轉(zhuǎn)讓合同(含土地流轉(zhuǎn)服務(wù))
- 二零二五年度公寓樓出租合同樣本(精裝修物業(yè)費家具家電)3篇
- 2025年度美容院投資入股合作協(xié)議模板3篇
- 2025年度兼職軟件開發(fā)外包合同3篇
- 二零二五年度綠色能源項目公司貸款協(xié)議書3篇
- 二零二五年度全新教育機(jī)構(gòu)兼職教師職稱評定合同3篇
- 二零二五年度公司與員工數(shù)字貨幣合作合伙協(xié)議3篇
- 2025年度全日制勞務(wù)合同書(環(huán)保能源設(shè)施運維)3篇
- 2025年度綠色有機(jī)農(nóng)產(chǎn)品直供合作購銷合同協(xié)議3篇
- 2025年度水果店轉(zhuǎn)讓及供應(yīng)鏈管理合同模板3篇
- 噎食風(fēng)險評估和預(yù)防措施
- 幼兒繪本故事:小福變成大漢堡
- 常寶精特能源概況
- 政治經(jīng)濟(jì)學(xué)結(jié)構(gòu)圖解
- 服裝品質(zhì)管理人員工作手冊
- 國家開放大學(xué)電大專科《獸醫(yī)基礎(chǔ)》2023-2024期末試題及答案試卷編號:2776
- 初三畢業(yè)班后期管理措施
- 示教機(jī)械手控制系統(tǒng)設(shè)計
- 氧化鋁生產(chǎn)工藝教學(xué)(拜耳法)
- 選礦學(xué)基礎(chǔ)PPT課件
- 安利食品經(jīng)銷商合同協(xié)議范本模板
評論
0/150
提交評論