MATLAB程式设计入门篇程式除错

上传人:枫** 文档编号:568698521 上传时间:2024-07-26 格式:PPT 页数:23 大小:499.47KB
返回 下载 相关 举报
MATLAB程式设计入门篇程式除错_第1页
第1页 / 共23页
MATLAB程式设计入门篇程式除错_第2页
第2页 / 共23页
MATLAB程式设计入门篇程式除错_第3页
第3页 / 共23页
MATLAB程式设计入门篇程式除错_第4页
第4页 / 共23页
MATLAB程式设计入门篇程式除错_第5页
第5页 / 共23页
点击查看更多>>
资源描述

《MATLAB程式设计入门篇程式除错》由会员分享,可在线阅读,更多相关《MATLAB程式设计入门篇程式除错(23页珍藏版)》请在金锄头文库上搜索。

1、MATLAB 程式設計入門篇程式除錯張智星 (Roger Jang)http:/mirlab.org/jang清大資工系 多媒體檢索實驗室MATLAB 程式設計入門篇:動畫製作17-1 簡介 nMATLAB 的除錯器(Debugger)功能包含:n查詢每一個函數的工作空間(Workspace) n顯示函數呼叫過程中的的堆疊(Function Call Stack)n一列一列地執行 M 檔案(Step-by-step Execution)n一般程式語言的錯誤分類n語法錯誤n邏輯錯誤MATLAB 程式設計入門篇:動畫製作17-2 一般除錯技巧(1/2)n一般偵測邏輯錯誤的方法:n去除運算式最尾端的

2、分號,運算式執行的結果會印在 MATLAB 指令視窗中。 n在程式中加入 keyboard 指令,可使程式執行至此處即暫停,並顯示“k ”的提示號(k 代表 keyboard),以便查看或改變工作空間的任何變數,若要繼續執行程式,可在 MATLAB 指令視窗下輸入“return”並按下 Enter 鍵。 MATLAB 程式設計入門篇:動畫製作17-2 一般除錯技巧(2/2)n使用判斷式及 fprintf 指令印出變數的值。n在除錯一個單獨函數時,可在其第一列的函數宣告列加上 %,並定義輸入引數的值,此時我們就可以直接以腳本(Scripts)的方式來執行此 M 檔案,並保留所有變數於 MATLA

3、B 工作空間之中。n使用 MATLAB 的除錯器。 MATLAB 程式設計入門篇:動畫製作17-3以命令列為主的除錯程式(1/2) 語 法 功 能 dbstop at line# in filename 設定中斷點(Break Points)(line# 代表行號,filename 代表檔案名稱) dbclear at line# in filename 清除中斷點(line#代表行號,filename 代表檔案名稱) dbstop if warningdbstop if errordbstop if naninfdbstop if infnan 若遇到警告(Warning)、錯誤(Error

4、)、或非數值/無窮大(NaN/Inf),則暫停程式執行 MATLAB 程式設計入門篇:動畫製作17-3以命令列為主的除錯程式(2/2)dbcont 從暫停狀態繼續執行dbstackdbstatus filename列出某檔案的所有中斷點(filename 代表檔案名稱)dbstep n 執行 n 列指令 dbtype filename 列出檔案內容(包含每列編號)(filename 代表檔案名稱) dbdown 向下進入局部的工作空間dbup 向上進入呼叫端的工作空間 dbquit 離開除錯模式 MATLAB 程式設計入門篇:動畫製作dbstop 的一般格式及相關說明 n可以利用dbstop來

5、指定程式碼的中斷點 指 令 格 式 說 明dbstop in filename at line# 停止執行於某檔案的某行dbstop in filename at subfunction 停止執行於某檔案的次函數dbstop in filename 停止執行於某檔案dbstop if error 若出現錯誤,則暫停程式執行,並停留在發生錯誤的工作空間 dbstop if warning 若出現警告,則暫停程式執行,並停留在發生警告的工作空間 dbstop if naninf dbstop if infnan 若出現 nan 或 inf,則暫停程式執行,並停留在發生 nan 或 inf的工作空間

6、 MATLAB 程式設計入門篇:動畫製作離開除錯模式後的動作n進入除錯模式後,可檢查任何變數的值,也可以執行其他任何指令或手稿(script)。n檢查完畢後,可能採取的動作有: 指 令 格 式 說 明 dbcont 繼續執行程式 dbstep n 執行 n 列程式碼 dbtype filename 列出程式碼dbdown 向下切換至另一個工作空間 dbup 向上切換至另一個工作空間 dbstack 列出函數呼叫過程中的堆疊 dbquit 跳出除錯模式 MATLAB 程式設計入門篇:動畫製作dbstep 的格式及說明ndbstep可以一次執行一列或多列程式碼,或是進入或跳出一個指令的內部程式碼

7、。 指 令 格 式 說 明dbstep 執行下一列程式碼 dbstep n 執行下 n 列程式碼 dbstep in 進入下一列指令的程式碼 dbstep out 跳出目前指令的程式碼 MATLAB 程式設計入門篇:動畫製作dbclear及dbstatus 的用法ndbclear 用於取消中斷點,用法與dbstop的格式同,只需將dbstop改成dbclear。若要清除所有的中斷點,可用 dbclear all。ndbstatus 可列出所有的中斷點。 指 令 格 式 說 明 dbstatus 列出所有中斷點 dbstatus filename 列出在一檔案中的中斷點s = dbstatus(

8、) 將中斷點的資訊傳回變數 s MATLAB 程式設計入門篇:動畫製作實例:計算一向量的倒數和n範例: recipsum.mn此函數包含一錯誤,執行時即會出現: type recipsumfunction out = recipsum(x)recip = reciproc(x);out = sum(recip);function output = reciproc(input)output = 1./x; recipsum(1 2 3)? Input argument x is undefined.Error in = D:matlabBookMATLAB程式設計:基本篇17-程式除錯reci

9、psum.mOn line 3 = recip = reciproc(x);MATLAB 程式設計入門篇:動畫製作使用dbstop及dbstatusn讓MATLAB 停留在產生錯誤訊息的函數: dbstop if errorn確認所建的中斷條件確認所建的中斷條件: dbstatus Stop if error.n再呼叫原函數,會停在錯誤發生的程式碼:MATLAB 程式設計入門篇:動畫製作使用dbstack及dbtypen此時可在指令視窗使用 dbstack 來顯示 MATLAB 所在的函數: n亦可用 dbtype 來顯示程式碼: k dbstack In recipsumreciproc a

10、t 7 In recipsum at 3 k dbtype 1 function out = recipsum(x)2 3 recip = reciproc(x);4 out = sum(recip);5 6 function output = reciproc(input)7 output = 1./x; MATLAB 程式設計入門篇:動畫製作使用dbquit、dbup及dbdownn在除錯器中將x改成input,則正確答案為:n當程式暫停執行於一個函數時,可以使用 dbup 及 dbdown 來跳到不同的工作空間,以便檢視各變數。k dbquit% 離開除錯模式離開除錯模式 recipsu

11、m1(1 2 3)ans = 1.8333 MATLAB 程式設計入門篇:動畫製作設立中斷條件n上述範例修正後的檔案為recipsum1.m,執行時還是可能會有問題 = Divide by zero. n另設一個中斷條件來檢查錯誤所在,再呼叫函數: recipsum1(2 0 2)ans = Inf dbstop if naninf recipsum1(2 0 2) NaN/Inf breakpoint hit for recipsum1 on line 4. 4 out = sum(recip); KMATLAB 程式設計入門篇:動畫製作除錯後的最終結果n假設在輸入為 0 時,其倒數不計,則

12、程式碼可修正如下,recipsum2.m:n正確答案為:k dbquit% 離開除錯模式離開除錯模式 type recipsum2 function out = recipsum(x)recip = reciproc(x);out = sum(recip);function output = reciproc(input)input(find(input=0) = ;% Eliminate 0 elements output = 1./input; recipsum2(2 0 2) ans = 1 MATLAB 程式設計入門篇:動畫製作17-4以圖形介面進行程式除錯n進行除錯,可由指令列下達

13、edit 或 open 指令,例如: edit recipsum1 可開啟 MATLAB 除錯器(也是編輯器) MATLAB 程式設計入門篇:動畫製作除錯指令與圖示 圖 示 MATLAB 對應指令 說 明dbstop/dbclear 設立或移除中斷點 dbclear all 移除所有中斷點 dbstep 執行下一列程式碼 dbstep in 進入某函數程式碼 dbstep out 退出某函數程式碼 dbcont 繼續執行程式碼 dbquit 跳出除錯模式 dbtype 列出程式碼 MATLAB 程式設計入門篇:動畫製作設立中斷點(1)n欲設立中斷點於 reciproc 函數的第一列,可利用滑鼠

14、將游標置於該列並點取 圖示。(紅點,代表中斷點 )MATLAB 程式設計入門篇:動畫製作設立中斷點(2)n若執行此函數,即可停於該中斷點: recipsum1(1 2 3) (綠色箭號顯示現在所在的位置 )MATLAB 程式設計入門篇:動畫製作檢視變數或運算式 n中斷後可在指令列檢視各個變數的值,或選取工具列上的 stack 下接式選單,以跳至不同的工作空間。 n檢視變數或運算式有三 :n將游標移到變數附近n在指令列輸入變數或運算式。n選取變數或運算式後,利用滑鼠右鍵點取,並選擇“Evaluate Selection”。MATLAB 程式設計入門篇:動畫製作逐步執行n若按下 圖示(或在指令列輸入 dbstep),則綠色箭號變成向下,代表即將離開此次函數。n再按 (或於指令列輸入 dbstep)數次,即可完成整個函數的逐步執行。MATLAB 程式設計入門篇:動畫製作 不同版本的MATLAB圖示對應關係 第六/七版圖示 第五版圖示 MATLAB對應指令 說 明 dbstop/dbclear 設立或移除中斷點 dbclear all 移除所有中斷點 dbstep 執行下一列程式碼 dbstep in 進入某函數程式碼 無dbstep out 退出某函數程式碼 dbcont 繼續執行程式碼 dbquit 跳出除錯模式 無dbtype 列出程式碼

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 办公文档 > 工作计划

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号