- Matlab 教程
- MATLAB - 首頁
- MATLAB - 概述
- MATLAB - 特性
- MATLAB - 環境設定
- MATLAB - 編輯器
- MATLAB - 線上
- MATLAB - 工作區
- MATLAB - 語法
- MATLAB - 變數
- MATLAB - 命令
- MATLAB - 資料型別
- MATLAB - 運算子
- MATLAB - 日期和時間
- MATLAB - 數字
- MATLAB - 隨機數
- MATLAB - 字串和字元
- MATLAB - 文字格式化
- MATLAB - 時間表
- MATLAB - M 檔案
- MATLAB - 冒號表示法
- MATLAB - 資料匯入
- MATLAB - 資料輸出
- MATLAB - 資料歸一化
- MATLAB - 預定義變數
- MATLAB - 決策
- MATLAB - 決策語句
- MATLAB - If End 語句
- MATLAB - If Else 語句
- MATLAB - If…Elseif Else 語句
- MATLAB - 巢狀 If 語句
- MATLAB - Switch 語句
- MATLAB - 巢狀 Switch
- MATLAB - 迴圈
- MATLAB - 迴圈
- MATLAB - For 迴圈
- MATLAB - While 迴圈
- MATLAB - 巢狀迴圈
- MATLAB - Break 語句
- MATLAB - Continue 語句
- MATLAB - End 語句
- MATLAB - 陣列
- MATLAB - 陣列
- MATLAB - 向量
- MATLAB - 轉置運算子
- MATLAB - 陣列索引
- MATLAB - 多維陣列
- MATLAB - 相容陣列
- MATLAB - 分類陣列
- MATLAB - 元胞陣列
- MATLAB - 矩陣
- MATLAB - 稀疏矩陣
- MATLAB - 表格
- MATLAB - 結構體
- MATLAB - 陣列乘法
- MATLAB - 陣列除法
- MATLAB - 陣列函式
- MATLAB - 函式
- MATLAB - 函式
- MATLAB - 函式引數
- MATLAB - 匿名函式
- MATLAB - 巢狀函式
- MATLAB - 返回語句
- MATLAB - 空函式
- MATLAB - 區域性函式
- MATLAB - 全域性變數
- MATLAB - 函式控制代碼
- MATLAB - 濾波器函式
- MATLAB - 階乘
- MATLAB - 私有函式
- MATLAB - 子函式
- MATLAB - 遞迴函式
- MATLAB - 函式優先順序順序
- MATLAB - Map 函式
- MATLAB - Mean 函式
- MATLAB - End 函式
- MATLAB - 錯誤處理
- MATLAB - 錯誤處理
- MATLAB - Try...Catch 語句
- MATLAB - 除錯
- MATLAB - 繪圖
- MATLAB - 繪圖
- MATLAB - 繪製陣列
- MATLAB - 繪製向量
- MATLAB - 條形圖
- MATLAB - 直方圖
- MATLAB - 圖形
- MATLAB - 2D 線性圖
- MATLAB - 3D 圖
- MATLAB - 格式化繪圖
- MATLAB - 對數座標軸繪圖
- MATLAB - 繪製誤差條
- MATLAB - 繪製 3D 等值線圖
- MATLAB - 極座標圖
- MATLAB - 散點圖
- MATLAB - 繪製表示式或函式
- MATLAB - 繪製矩形
- MATLAB - 繪製頻譜圖
- MATLAB - 繪製網格曲面圖
- MATLAB - 繪製正弦波
- MATLAB - 插值
- MATLAB - 插值
- MATLAB - 線性插值
- MATLAB - 2D 陣列插值
- MATLAB - 3D 陣列插值
- MATLAB - 多項式
- MATLAB - 多項式
- MATLAB - 多項式加法
- MATLAB - 多項式乘法
- MATLAB - 多項式除法
- MATLAB - 多項式的導數
- MATLAB - 變換
- MATLAB - 變換
- MATLAB - 拉普拉斯變換
- MATLAB - 拉普拉斯濾波器
- MATLAB - 高斯-拉普拉斯濾波器
- MATLAB - 逆傅立葉變換
- MATLAB - 傅立葉變換
- MATLAB - 快速傅立葉變換
- MATLAB - 2D 逆餘弦變換
- MATLAB - 向座標軸新增圖例
- MATLAB - 面向物件
- MATLAB - 面向物件程式設計
- MATLAB - 類和物件
- MATLAB - 函式過載
- MATLAB - 運算子過載
- MATLAB - 使用者定義類
- MATLAB - 複製物件
- MATLAB - 代數
- MATLAB - 線性代數
- MATLAB - 高斯消元法
- MATLAB - 高斯-約旦消元法
- MATLAB - 簡化行階梯形
- MATLAB - 特徵值和特徵向量
- MATLAB - 積分
- MATLAB - 積分
- MATLAB - 二重積分
- MATLAB - 梯形法則
- MATLAB - 辛普森法則
- MATLAB - 其他
- MATLAB - 微積分
- MATLAB - 微分
- MATLAB - 矩陣的逆
- MATLAB - GNU Octave
- MATLAB - Simulink
- MATLAB - 有用資源
- MATLAB - 快速指南
- MATLAB - 有用資源
- MATLAB - 討論
MATLAB - 除錯
除錯有助於識別和修復程式碼中的錯誤或問題,確保程式正確執行。
在瞭解如何開始除錯的詳細資訊之前,讓我們列出 Matlab 程式中常見的錯誤型別。
- 語法錯誤 - 這些錯誤是由於程式碼結構不正確引起的,例如缺少或不匹配的括號、逗號或分號。
- 執行時錯誤 - 這些錯誤發生在程式碼執行期間,通常是由於諸如除以零或訪問不存在的變數等問題引起的。
- 邏輯錯誤 - 這些錯誤最棘手,因為它們不會觸發錯誤訊息,但會產生錯誤的結果。除錯這些錯誤通常需要仔細檢查演算法的邏輯。
讓我們詳細瞭解 Matlab 中的除錯。
使用 MATLAB 編輯器
MATLAB 的整合開發環境 (IDE) 包括 MATLAB 編輯器,它提供了許多功能來幫助除錯 -
- 語法高亮 - 它透過以不同的顏色顯示程式碼元素來幫助您發現語法錯誤。
- 程式碼摺疊 - 整理您的程式碼以提高可讀性和更輕鬆地進行除錯。
- 程式碼建議 - MATLAB 可以為函式和變數提供自動建議,減少打字錯誤。
以下是一些示例。
語法高亮顯示了程式碼中的問題,如上圖所示。我在第 3 行錯過了分號。它還提供了詳細資訊選項,單擊它後您將看到以下內容 -
單擊“修復”按鈕將在第 3 行新增一個現在缺少的分號。
讓我們再舉一個語法錯誤的例子 -
這裡在第 6 行,我錯過了 fprintf() 的閉合括號。錯誤突出顯示了出現的問題,如上圖所示。
Matlab 中的斷點
斷點就像放置在 Matlab 程式碼中的標記,用於在標記點中斷執行。當代碼到達斷點時,它會暫停,允許您檢查變數、檢查程式狀態和分析程式碼的行為。
您可以如下新增斷點 -
單擊您希望新增斷點的行號。該行號將如上圖所示突出顯示。在右側,您會看到“斷點”部分,其中包含有關函式 calculateAndDisplaySum.m 的斷點詳細資訊。
現在,當您呼叫函式 calculateAndDisplaySum 時,它將在執行期間在第 6 行停止。您可以檢查斷點之前的所有行號,以確保函式中的變數和邏輯是否給出正確的結果。
Matlab 中斷點的暫停和檢查
程式碼執行在斷點處停止,允許您檢查變數、檢查其值並在命令視窗或“變數”面板中評估表示式。
以下是 Matlab 中的執行流程 -
當您將游標放在變數上時,它會顯示函式中使用的變數的值,如上圖所示。
斷點處的操作
程式碼在斷點處暫停後,您可以使用偵錯程式控制元件(單步執行、步入、步出)逐行單步執行程式碼。
使用紅色突出顯示的“繼續”按鈕從斷點恢復程式碼執行。
在 Matlab 中使用執行進行除錯
要執行程式碼直到指定行然後暫停,請選擇該行左側的“執行到游標”按鈕。如果所選行無法立即訪問,則 Matlab 將繼續執行程式碼,直到到達檔案末尾或遇到斷點。
示例
在除錯過程中,“執行到此處”按鈕將轉換為“繼續到此處”按鈕。在函式和類中,僅在除錯期間才能透過“繼續到此處”按鈕訪問執行到特定行並暫停的功能。
當 Matlab 進入暫停狀態時,會發生一些更改 -
- 編輯器或即時編輯器選項卡中的“執行”按鈕將轉換為“繼續”按鈕。
- 命令視窗提示符將變為 K>>,表示 Matlab 的除錯模式,其中鍵盤控制。
- Matlab 用綠色箭頭標記暫停的行,並將其以綠色突出顯示,以便於識別。
Matlab 暫停的行將保持非活動狀態,直到您選擇繼續執行程式碼。要恢復,只需單擊“繼續”按鈕。然後,Matlab 將繼續執行檔案,直到到達其結尾或遇到斷點。或者,您可以選擇所需程式碼行左側的“繼續到此處”按鈕以恢復到該點的執行。
一些有助於程式碼除錯的有用方法
以下是一些可幫助您更有效地除錯程式碼的實用技巧 -
使用 codeIssues() 方法
在 Matlab 中,codeIssues 是一個容器物件,其中包含程式碼分析器識別的問題資訊。issues 變數用於儲存或引用來自 codeIssues 物件的資訊。
語法
issues = codeIssues : this takes care of issues with code related to the current folder and returns codeIssues object. issues = codeIssues(names) : Here you can specify the name of the folder or file name for which you wish to issue the code issues.
示例
在本例中,我們希望檢視與 add.m 檔案相關的問題。
issues = codeIssues("add.m")
執行後,您將獲得以下輸出 -
>> issues = codeIssues("add.m")
issues =
codeIssues with properties:
Date: 01-Dec-2023 16:48:56
Release: "R2023b"
Files: "/MATLAB Drive/add.m"
CodeAnalyzerConfiguration: "active"
Issues: [0x10 table]
SuppressedIssues: [0x11 table]
>>
現在我們看到 add.m 檔案沒有任何問題。讓我們犯一些錯誤,看看在使用 codeIssues() 方法時是否會顯示相同的內容。
考慮 add.m 檔案,其中第 2 行缺少分號,如下面的螢幕截圖所示 -
執行 issues = codeIssues("add.m") 後,在 Matlab 命令視窗中提供以下詳細資訊 -
使用 checkcode() 方法
此方法顯示給定檔名可能存在的問題。
語法
checkcode(filename) : give the filename here for which you wish to see the code issues.
示例
checkcode 函式檢查 Matlab 指令碼檔案 add.m 中是否存在潛在問題。
checkcode('add.m')
在 Matlab 命令視窗中執行後,您將獲得以下輸出 -
>> checkcode('add.m')
L 2 (C 12): Add a semicolon after the statement to hide the output (in a function).