MATLAB 程式設計入門篇 程式除錯 張智星 (Roger Jang)

Slides:



Advertisements
Similar presentations
办公室保健指南. 减少辐射篇 ❤显示器散发出的辐射多数不是来自它的正面,而是侧面和后面。因此,不要 把自己显示器的后面对着同事的后脑或者身体的侧面。 ❤常喝绿茶。茶叶中含有的茶多酚等活性物质,有助吸收放射性物质。 ❤尽量使用液晶显示器。
Advertisements

國立成功大學工程科學系 Department of Engineering Science -National Cheng Kung University 控制與訊號處理實驗室 Control & Signal Processing Lab MATLAB/Simulink 教學.
A-1 A-2 A-3 A-4 A-5 A-7 A-6 A-8 A-9. B-1 B-2 B-3 B-4.
魏 饴. 处级干部培训班讲座 一、卓越干部的德行素质  常修为政之德、常思贪欲之害、常怀律己之心!  孔老夫子有个观点 “ 为政以德,譬如北辰居其所而众星拱之。 ”  司马光《资治通鉴》 “ 才者,德之资也;德者,才之帅也。 ” “ 德 ” 胜 “ 才 ” 谓之 “ 君子 ” , “ 才 ”
一、真愛密碼 二、尋求真愛 三、有自尊的愛. 。如果雙方對愛情產生 質疑、困惑時,則表示 彼此之間的愛情關係仍 有 待加強或釐清,千萬別 急著為自己的人生大事 下決定。 我是一個 16 歲的未婚媽媽,發現自 己懷孕時,已經五個月大了,我知 道自己沒能力照顧孩子,在驚訝之 於,大人們只好坦然接受,幫我找.
大地遊戲王 課程實錄.
第 5 章 中國的都市.
南山中學 102學年度 性別平等教育週性別教育 性騷擾防治.
性教育教學模組設計 主題:身體自主權 台中市忠明國小 巫偉鈴.
加強水銀體溫計稽查管制及回收 回收作業須知及緊急應變措施
整体销售方案 中山市美好物业代理有限公司
组长:陈庆鹏 组员:殷悦 倪程 方家豪* 白羽萌
第4章 分錄及日記簿 4-1 借貸法則 4-2 日記簿的格式及記錄方法 4-3 分錄的意義及記錄方法 4-4 常見分錄題型分析
一百零一年溪口國小 學校日 班級: 三年三班 教師: 張慈麟.
臺中市頭家國小 生理衛生講座 青春期的奧秘 ‧說到青春期,你會想到? ‧班級表現最好的,有獎徵答有優先權。 葉孟娟老師、黃文玲老師.
中五級中史科及通識科跨科研習 研習大澳的「宗教文化」─ 廟宇的研習 指導老師:周婉儀老師 組員: 陳偉欽 5a (15)
第十三屆 Step.1 我們的目標 Step.2 我們的角色 Step.4 權利與義務 義務 權利 年繳會費五百元整
第四章 MATLAB编程基础 4.1 概述 4.2 流程控制 4.3 脚本文件 4.4 函数文件 4.5 M文件调试 4.6 M文件性能分析
用“自言自语法”提高学生 英语口头表达能力 李奉栖.
关注热点 2014年天猫双十一成交总额 571亿 点亮217个国家地区
财务管理.
您買美元了嗎? 退休規劃 全球外幣保單.
古文閱讀 – 像虎伏獸 明 劉基 組員: 5號江依倫 6號江若薇 12號張珉芫 32號蔡燕如.
1. 民主社會裡,公民的參與有其重要性,而透過政治參與無法達成下列哪一項目的?
植物保护 课程整体设计 汇报 申报省级精品资源共享课建设 植物保护课程组.
高等职业学校建筑设计类与艺术设计类专业骨干教师实践能力国家级培训
臺南市103年國中小主任儲訓班 工程採購實務經驗分享 臺南市東區德高國民小學 總務主任李興鎵.
1012 MATLAB 教學 彭奕翔 2013/02/27.
没有请柬该如何办 记者如何选取有利位置 着装 准备工作 提问时的注意事项
政府扶持资金通览 技术改造篇.
基隆市立八斗高中 102 學年度第二學期 402 班『親師座談』
3.1能源资源的开发 ——以我国山西省为例.
簡易送審動態案件網 路報送作業操作訓練 資料來源 銓敘部製作 報告人 饒瑞恭 日 期: 101 年 6 月 15 日.
國語文好點子趴辣客教學食譜 甜點:〈焦糖鳥布蕾〉
FC OB1 FB SFC 操作系统 SFB OBs 结构化编程 其它
第七讲 matlab的程序设计 —— matlab语言称为第四代编程语言,程序简洁、可读性很强而且调试十分容易。
本科生医保资料的提交.
張智星 (Roger Jang) 清大資工系 多媒體檢索實驗室
结构化编程 FC OB1 FB SFC 操作系统 SFB OBs 其它
Matlab M檔案 方煒 台大生機系.
統計圖表的製作.
講師:戴志華 國立台灣大學電機工程研究所 Visual Basic 程式設計 講師:戴志華 國立台灣大學電機工程研究所.
第八讲 MATLAB图形用 户界面设计.
引 言.
Introduction to MATLAB
MATLAB 程式設計入門篇 初探MATLAB
MATLAB介绍 Matlab基本命令介绍 Matlab矩阵运算 Matlab控制流 Matlab图像处理工具箱 实习题讲解.
東部海岸 馬蘭國小 五年己班 閔芳頤 Enter
第2章 MATLAB程序设计 编者.
共有六個運算性質 包括它的證明以及相關題型
《结构力学认知实验》(授课形式)的上课时间改为: 5月5日(周二)晚上18:00~19:30和19:30~21:00,
《结构力学认知实验》(授课形式)的上课时间改为: 5月7日(周四)晚上18:30~20:00和20:00~21:30,
第9章 MATLAB环境下的仿真软件Simulink
MATLAB 程式設計入門篇 初探MATLAB
注音輸入法教學 大華技術學院資管系 指導老師:陳信如老師 學生:王麗嵐.
學這些有什麼好處呢? 為了把資料作更客觀之總結描述或比較多組資料。總而言之,就是要找出一個數能代表整組數據。
MATLAB 程式設計入門篇 初探MATLAB
Course 10 削減與搜尋 Prune and Search
畢業資格審查系統 操作步驟說明.
VC++程序调试演示 An Overview of ICU 19th International Unicode Conference
新制退休實務計算說明- 現職人員退休範例說明
合歡山 馬蘭國小 五年己班 何宜倞 ENTER.
106 學年度新生入學說明會 國立臺灣海洋大學 教務處簡介
MATLAB 程式設計 程式除錯 方煒 台大生機系.
學士學位畢業論文說明 逢 學 大 甲 土 理 管 地 2009/10/05.
全台灣最美的日出好美…好美… 這就是傳說中的潑墨二寮,耳聞她的日出有如國畫般 所以稱為潑墨二寮
高雄市97年度國民小學閱讀計畫創新教學-教案達人創新教學方案
智慧財產權管理講次36 積體電路電路布局保護法(1) 主講:吳銘圳
厉害了,我的国! 15会计2班团支部 2018年4月20日.
第二单元 第3课 Matlab命令执行方式 1.Matlab命令执行方式 2.程序调试.
Presentation transcript:

MATLAB 程式設計入門篇 程式除錯 張智星 (Roger Jang) jang@mirlab.org http://mirlab.org/~jang 清大資工系 多媒體檢索實驗室

17-1 簡介 MATLAB 的除錯器(Debugger)功能包含: 一般程式語言的錯誤分類 查詢每一個函數的工作空間(Workspace) 顯示函數呼叫過程中的的堆疊(Function Call Stack) 一列一列地執行 M 檔案(Step-by-step Execution) 一般程式語言的錯誤分類 語法錯誤 邏輯錯誤

17-2 一般除錯技巧(1/2) 一般偵測邏輯錯誤的方法: 去除運算式最尾端的分號,運算式執行的結果會印在 MATLAB 指令視窗中。 在程式中加入 keyboard 指令,可使程式執行至此處即暫停,並顯示“k >>”的提示號(k 代表 keyboard),以便查看或改變工作空間的任何變數,若要繼續執行程式,可在 MATLAB 指令視窗下輸入“return”並按下 Enter 鍵。

17-2 一般除錯技巧(2/2) 使用判斷式及 fprintf 指令印出變數的值。 在除錯一個單獨函數時,可在其第一列的函數宣告列加上 %,並定義輸入引數的值,此時我們就可以直接以腳本(Scripts)的方式來執行此 M 檔案,並保留所有變數於 MATLAB 工作空間之中。 使用 MATLAB 的除錯器。

17-3以命令列為主的除錯程式(1/2) 語 法 功 能 dbstop at line# in filename 語 法 功 能 dbstop at line# in filename 設定中斷點(Break Points) (line# 代表行號,filename 代表檔案名稱) dbclear at line# in filename 清除中斷點 (line#代表行號,filename 代表檔案名稱) dbstop if warning dbstop if error dbstop if naninf dbstop if infnan 若遇到「警告」(Warning)、「錯誤」(Error)、或「非數值/無窮大」(NaN/Inf),則暫停程式執行

17-3以命令列為主的除錯程式(2/2) dbcont 從暫停狀態繼續執行 dbstackdbstatus filename 列出某檔案的所有中斷點 (filename 代表檔案名稱) dbstep n 執行 n 列指令 dbtype filename 列出檔案內容(包含每列編號) dbdown 向下進入局部的工作空間 dbup 向上進入呼叫端的工作空間 dbquit 離開除錯模式

dbstop 的一般格式及相關說明 可以利用dbstop來指定程式碼的中斷點 指 令 格 式 說 明 指 令 格 式 說 明 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的工作空間

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

dbstep 的格式及說明 dbstep可以一次執行一列或多列程式碼,或是進入或跳出一個指令的內部程式碼 。 指 令 格 式 說 明 指 令 格 式 說 明 dbstep 執行下一列程式碼 dbstep n 執行下 n 列程式碼 dbstep in 進入下一列指令的程式碼 dbstep out 跳出目前指令的程式碼

dbclear及dbstatus 的用法 dbclear 用於取消中斷點,用法與dbstop的格式同,只需將dbstop改成dbclear。若要清除所有的中斷點,可用 dbclear all。 dbstatus 可列出所有的中斷點。 指 令 格 式 說 明 dbstatus 列出所有中斷點 dbstatus filename 列出在一檔案中的中斷點 s = dbstatus(…) 將中斷點的資訊傳回變數 s

實例:計算一向量的倒數和 範例: recipsum.m 此函數包含一錯誤,執行時即會出現: >> type recipsum function 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:\matlabBook\MATLAB程式設計:基本篇\17-程式除錯\recipsum.m On line 3 ==> recip = reciproc(x);

使用dbstop及dbstatus 讓MATLAB 停留在產生錯誤訊息的函數: >> dbstop if error 確認所建的中斷條件:    >> dbstatus                Stop if error. 再呼叫原函數,會停在錯誤發生的程式碼:

使用dbstack及dbtype 此時可在指令視窗使用 dbstack 來顯示 MATLAB 所在的函數: k>> dbstack > In recipsum>reciproc at 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;

使用dbquit、dbup及dbdown 在除錯器中將x改成input,則正確答案為: 當程式暫停執行於一個函數時,可以使用 dbup 及 dbdown 來跳到不同的工作空間,以便檢視各變數。 k>> dbquit % 離開除錯模式 >> recipsum1([1 2 3]) ans = 1.8333

設立中斷條件 上述範例修正後的檔案為recipsum1.m,執行時還是可能會有問題 => Divide by zero. 另設一個中斷條件來檢查錯誤所在,再呼叫函數: >> 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); K>>

除錯後的最終結果 假設在輸入為 0 時,其倒數不計,則程式碼可修正如下,recipsum2.m: 正確答案為: 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

17-4以圖形介面進行程式除錯 進行除錯,可由指令列下達 edit 或 open 指令,例如: >> edit recipsum1 可開啟 MATLAB 除錯器(也是編輯器)

除錯指令與圖示 圖 示 MATLAB 對應指令 說 明 dbstop/dbclear 設立或移除中斷點 dbclear all 圖 示 MATLAB 對應指令 說 明 dbstop/dbclear 設立或移除中斷點 dbclear all 移除所有中斷點 dbstep 執行下一列程式碼 dbstep in 進入某函數程式碼 dbstep out 退出某函數程式碼 dbcont 繼續執行程式碼 dbquit 跳出除錯模式 dbtype 列出程式碼

設立中斷點(1) 欲設立中斷點於 reciproc 函數的第一列,可利用滑鼠將游標置於該列並點取 圖示。(紅點,代表中斷點 )

設立中斷點(2) 若執行此函數,即可停於該中斷點: >> recipsum1([1 2 3]) (綠色箭號顯示現在所在的位置 )

檢視變數或運算式 中斷後可在指令列檢視各個變數的值,或選取工具列上的 stack 下接式選單,以跳至不同的工作空間。 檢視變數或運算式有三 : 將游標移到變數附近 在指令列輸入變數或運算式。 選取變數或運算式後,利用滑鼠右鍵點取,並選擇“Evaluate Selection”。

逐步執行 若按下 圖示(或在指令列輸入 dbstep),則綠色箭號變成向下,代表即將離開此次函數。

不同版本的MATLAB圖示對應關係 第六/七版 圖示 第五版 MATLAB 對應指令 說 明 dbstop/dbclear 設立或移除中斷點 說 明 dbstop/dbclear 設立或移除中斷點 dbclear all 移除所有中斷點 dbstep 執行下一列程式碼 dbstep in 進入某函數程式碼 無 dbstep out 退出某函數程式碼 dbcont 繼續執行程式碼 dbquit 跳出除錯模式 dbtype 列出程式碼