- 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).