文档

检查代码中的错误和警告

MATLAB®Code Analyzer可以自动检查代码的编码问题。

在编辑器-代码分析器中自动检查代码

您可以查看有关代码的警告和错误消息,并根据这些消息修改文件。消息会自动持续更新,因此您可以查看您的更改是否解决了消息中所指出的问题。有些消息提供附加信息、自动代码更正或两者兼有。

启用连续代码检查

要在编辑器中启用MATLAB代码文件中的连续代码检查:

  1. 首页选项卡,在环境部分中,点击首选项

  2. 选择MATLAB>代码分析器,然后选择启用集成的警告和错误消息复选框。

  3. 设置突显出选项在警告和错误下划线,然后按好吧

请注意

中不支持更改连续代码检查首选项金宝appMATLAB在线™.连续代码检查总是启用的。

使用连续代码检查

您可以在编辑器中使用MATLAB代码文件中的连续代码检查:

  1. 在编辑器中打开MATLAB代码文件。本例使用示例文件lengthofline.m随MATLAB软件发布的:

    1. 打开示例文件:

      open (fullfile (matlabroot‘帮助’,‘techdoc’,‘matlab_env’,……“例子”、“lengthofline.m '))
    2. 将示例文件保存到您有写访问权限的文件夹中。举个例子,lengthofline.m保存到C: \ my_MATLAB_files

  2. 检查消息栏顶部的消息指示器,查看为该文件报告的Code Analyzer消息:

    • 红色的指示检测到语法错误或其他重要问题。

    • 橙色指示警告或改进机会,但未检测到错误。

    • 绿色表示未检测到错误、警告或改进机会。

    在本例中,指示器是红色的,这意味着文件中至少有一个错误。

  3. 单击消息指示器转到包含消息的下一个代码片段。下一个代码片段相对于当前光标位置,在状态栏中可见。

    lengthofline例如,第一个消息在第21行。光标移动到第21行开头。

    有消息的代码片段用红色下划线表示错误,用橙色下划线表示警告和改进机会。

  4. 通过在带下划线的代码片段中移动鼠标指针来查看消息。

    该消息在工具提示中打开,并包含细节按钮,通过扩展消息提供对其他信息的访问。并非所有消息都有附加信息。

  5. 单击细节按钮。

    该窗口展开以显示解释和用户操作。

  6. 如果需要,修改您的代码。

    即使您没有保存文件,消息指示符和下划线也会自动更新以反映您所做的更改。

  7. 在第27行,悬停刺激

    代码下划线显示是因为有一个警告消息,突出显示是因为有一个自动修复程序可用。在查看消息时,它提供了一个用于应用自动修复的按钮。

  8. 通过以下方法之一解决问题:

    • 如果您知道解决方案是什么(根据以前的经验),请单击修复

    • 如果您不熟悉修复,查看,然后应用它如下:

      1. 右键单击突出显示的代码(对于单按钮鼠标,单击Ctrl+点击),然后查看上下文菜单中的第一项。

      2. 点击修复。

        MATLAB自动校正代码。

        在本例中,用MATLAB代替刺激(大小(线))元素个数(线)

  9. 通过执行以下操作之一转到不同的消息:

    • 要转到下一条消息,请单击消息指示器或下一个带下划线的代码片段。

    • 若要转到标记所表示的线,请单击指示器栏中的红色或橙色线。

      看第一个错误lengthofline,单击消息栏中的第一个红色标记。光标移动到第47行中第一个可疑的代码片段。的细节而且修复按钮变暗(或不可见,如果在MATLAB在线),表示没有关于此消息的更多信息,并且没有自动修复。

      多条消息可以表示单个问题或多个问题。寻址其中一条消息可能会寻址所有消息,或者在寻址一条消息之后,其他消息可能会改变,或者您需要做的事情可能会变得更清楚。

  10. 修改代码以解决消息中指出的问题—消息指示器自动更新。

    在第47行,消息提示分隔符不平衡。要研究此消息,请在编辑器中将方向键移动到每个分隔符上,以查看MATLAB是否指示不匹配。有关如何在箭头上启用分隔符匹配的说明,请参见设置键盘参数

    似乎没有不匹配的分隔符。然而,代码分析检测到括号中的分号:数据{3}(,),并将其解释为语句的结束。该消息报告第47行上的两个语句都有一个分隔符不平衡。

    要解决这个问题,请在第47行中更改数据{3}(,){3}数据(:).现在,下划线不再出现在第47行中。这个单一的更改解决了第47行的两个消息中的问题。因为更改删除了文件中的唯一错误,所以工具条顶部的消息指示器从红色变为橙色,表明只保留了警告和潜在的改进。

在修改代码以处理所有消息或禁用指定的消息后,消息指示器变成绿色。包含所有邮件地址的示例文件已保存为lengthofline2.m.使用以下命令打开更正后的示例文件:

open (fullfile (matlabroot‘帮助’,‘techdoc’,……“matlab_env”、“例子”、“lengthofline2.m '))

创建一个代码分析器消息报告

您可以使用以下方法之一为单个文件或文件夹中的所有文件创建消息报告:

  • 运行一个单独的MATLAB代码文件的报告:

    1. 在“编辑器”窗口中,单击并选择显示代码分析器报告

      代码分析器报告出现在MATLAB Web浏览器中。

    2. 根据报告中的消息修改文件。

    3. 保存文件。

    4. 重新运行报告,查看您的更改是否解决了消息中指出的问题。

  • 为文件夹中的所有文件运行报告:

    1. 在“当前文件夹”浏览器中,单击

    2. 选择报告>代码分析器报告

    3. 根据报告中的消息修改文件。

      详细信息请参见MATLAB代码分析器报告

    4. 保存修改后的文件。

    5. 重新运行报告,查看您的更改是否解决了消息中指出的问题。

调整代码分析器消息指示器和消息

根据您在完成MATLAB文件时所处的阶段,您可能希望限制代码下划线。可以通过使用步骤1中提到的Code Analyzer首选项来实现这一点检查代码中的错误和警告.例如,在第一次编码时,您可能更喜欢只在错误下划线,因为警告会分散注意力。

代码分析并不能提供关于每种情况的完美信息,有时,您可能不希望根据消息更改代码。如果不希望更改代码,并且不希望看到该行的指示器和消息,请禁用它们。为lengthofline例如,在第49行中,第一个消息是用分号终止语句以抑制输出(在函数中).在语句末尾添加分号会抑制输出,这是一种常见的做法。代码分析提醒您注意产生输出但缺少终止分号的行。如果希望查看第49行中的输出,不要像消息提示的那样添加分号。

有几种不同的方法来抑制(关闭)警告和错误消息的指示器:

您不能抑制错误消息,例如语法错误。因此,关于抑制消息的说明不适用于这些类型的消息。

在当前文件中抑制消息的实例

您可以在当前文件中抑制代码分析器消息的特定实例。例如,使用中提供的代码检查代码中的错误和警告,按以下步骤进行:

  1. 在第49行中,右键单击第一个下划线(对于单按钮鼠标,单击Ctrl+点击)。

  2. 从上下文菜单中选择禁止使用分号终止语句…>在这一行

    评论% #好< NOPRT >出现在行末,指示MATLAB不要在该行检查终止分号。该消息的指示栏中的下划线和标记将消失。

  3. 如果一行上有两条您不想显示的消息,请分别右键单击每个下划线,并从上下文菜单中选择适当的条目。

    % #好吧语法扩展。对于示例,在中给出的代码中检查代码中的错误和警告,忽略第49行添加的两条消息% #好< NBRAK, NOPRT >

    即使将Code Analyzer首选项设置为启用此消息,也不会出现以这种方式抑制的消息的特定实例,因为% #好吧优先于首选项设置。如果稍后决定在该行检查终止分号,请删除% #好< NOPRT >从线上开始。

禁止当前文件中消息的所有实例

您可以在当前文件中禁用特定Code Analyzer消息的所有实例。例如,使用中提供的代码检查代码中的错误和警告,按以下步骤进行:

  1. 在第49行中,右键单击第一个下划线(对于单按钮鼠标,单击Ctrl+点击)。

  2. 从上下文菜单中选择禁止使用分号终止语句…>在此文件中

评论% #好< * NOPRT >出现在行末,指示MATLAB在整个文件中不要检查终止分号。消息指示栏中与此消息对应的所有下划线和标记将消失。

如果某一行上有两条消息,而您不想在当前文件的任何位置显示它们,请分别右键单击每个下划线,然后从上下文菜单中选择适当的条目。的% #好吧语法扩展。对于示例,在中给出的代码中检查代码中的错误和警告,忽略第49行添加的两条消息% #好< * NBRAK, * NOPRT >

即使将代码分析器首选项设置为启用此消息,该消息也不会出现,因为% #好吧优先于首选项设置。如果稍后决定在文件中检查终止分号,请删除% #好< * NOPRT >从线上开始。

在所有文件中禁止消息的所有实例

您可以禁用所有文件中代码分析器消息的所有实例。例如,使用中提供的代码检查代码中的错误和警告,按以下步骤进行:

  1. 在第49行中,右键单击第一个下划线(对于单按钮鼠标,单击Ctrl+点击)。

  2. 选择禁止使用分号终止语句…>在所有文件中

这将修改代码分析器首选项设置。

如果您知道要屏蔽哪些消息,则可以直接使用代码分析器首选项禁用它们,如下所示:

  1. 首页选项卡,在环境部分中,点击首选项

  2. 选择MATLAB>代码分析器

  3. 搜索消息找到你想要压制的人。

  4. 清除与所有文件中要删除的每条消息相关联的复选框。

  5. 点击好吧

Live编辑器不支持通过右键单击下划线在所有文件中删除代码分析程序消息的所有实例。金宝app若要在实时编辑器中禁用代码分析器消息的所有实例,请使用代码分析器首选项。中不支持在所有文件中压制代码分析程序消息的所有实例金宝appMATLAB在线

保存和重用代码分析器消息设置

您可以指定希望启用或禁用某些Code Analyzer消息,然后将这些设置保存到一个文件中。当您希望对特定文件使用设置文件时,可以从Code Analyzer首选项窗格中选择该文件。在选择另一个设置文件之前,该设置文件一直有效。通常,当您有一个子集的文件想要使用特定的设置文件时,您可以更改设置文件。

遵循以下步骤:

  1. 首页选项卡,在环境部分中,点击首选项

    打开Preferences对话框。

  2. 选择MATLAB>代码分析器

  3. 启用或禁用特定消息或消息类别。

  4. 点击Actions按钮中,选择另存为,然后保存到a三种文件。

  5. 点击好吧

您可以为任何MATLAB文件重用这些设置,或将设置文件提供给其他用户。

使用已保存的设置:

  1. 首页选项卡,在环境部分中,点击首选项

    打开Preferences对话框。

  2. 选择MATLAB>代码分析器

  3. 使用活动设置要选择的下拉列表浏览…

    弹出“打开”对话框。

  4. 从您的任何设置文件中选择。

    您选择的设置对所有MATLAB文件都有效,直到您选择另一组代码分析器设置。

理解包含抑制消息的代码

如果您收到的代码包含被抑制的消息,您可能希望检查这些消息,而不需要首先取消抑制。由于以下原因,消息可能处于抑制状态:

  • 一个或多个% #好<问题>指令位于一行代码上,由<问题>

  • 一个或多个% #好< *问题>指令位于一个文件中,该文件引发由<问题>

  • 它在Code Analyzer首选项窗格中被清除。

  • 默认是禁用的。

要确定某些消息被抑制的原因:

  1. 在文件中搜索% #好吧指令,并创建一个与该指令相关的所有消息id的列表。

  2. 首页选项卡,在环境部分中,点击首选项

    打开Preferences对话框。

  3. 选择MATLAB>代码分析器

  4. 在搜索字段中,键入是否:后面是在步骤1中找到的一个消息id(如果有的话)。

    消息列表现在只包含与该ID对应的消息。如果该消息是一个超链接,请单击它以查看该消息的解释和建议操作。这可以深入了解消息被抑制或禁用的原因。下图显示了当您输入时Preferences对话框如何出现是否:CPROP在搜索栏中。

  5. 单击按钮以清除搜索字段,然后对步骤1中找到的每个消息ID重复步骤4。

  6. 通过单击搜索字段右侧的向下箭头,在首选项窗格中显示默认禁用和禁用的消息。然后,单击显示禁用消息

  7. 检查与每个消息ID关联的消息,以了解为什么它在代码中被抑制或在Preferences中被禁用。

理解代码分析的局限性

代码分析是一个很有价值的工具,但也有一些局限性:

  • 有时,它不能在您期望的地方生成Code Analyzer消息。

    按照设计,代码分析试图最小化它返回的不正确消息的数量,即使这种行为允许一些问题未被检测到。

  • 有时,它产生的消息并不适用于您的情况。

    当提供消息时,单击细节按钮,以获取其他信息,这些信息可以帮助您做出此决定。错误消息几乎总是问题所在。然而,许多警告都是建议查看代码中不寻常的、因此可疑的东西,但在您的情况下可能是正确的。

    如果您确定警告消息不适用于您的情况,则取消该警告消息。如果你屏蔽某条信息的原因很微妙或模糊,那就附上一条解释理由的评论。这样,阅读代码的人就能了解情况。

    详细信息请参见调整代码分析器消息指示器和消息

这些部分描述了以下方面的代码分析限制:

区分函数名和变量名

代码分析不能总是区分函数名和变量名。对于下面的代码,如果启用了代码分析器消息,代码分析将返回该消息,Code Analyzer无法确定xyz是变量还是函数,并假定它是函数.代码分析不能作出决定,因为xyz没有明显的价值分配给它。然而,程序可能以代码分析无法检测到的方式将值放置在工作区中。

函数y=foo(x)…Y = xyz(x);结束

例如,在下面的代码中,xyz可以是函数,也可以是从mat文件中加载的变量。代码分析无法做出决定。

函数y=foo(x) load abc。Mat y = xyz(x);结束
类时,代码分析也可能无法检测到变量evalevalcevalin,或assignin功能。

如果代码分析将变量误认为函数,请执行以下操作之一:

  • 初始化变量,这样代码分析就不会将其视为函数。

  • 负载函数中显式指定变量名负载命令行。例如:

    函数y=foo(x) load abc。垫xyz y = xyz(x);结束

区分结构和句柄对象

代码分析不能总是区分结构和句柄对象。在下面的代码中,如果x是结构,则您可能期望代码分析器消息指示代码从未使用该结构的更新值。如果x是句柄对象,但是,则此代码是正确的。

函数foo(x) x.a = 3;结束

代码分析无法确定是否x是结构或句柄对象。为了尽量减少错误消息的数量,代码分析不会为前面的代码返回任何消息,即使它可能包含一个微妙而严重的错误。

区分内置函数和重载函数

如果某些内置函数在类中或路径上重载,Code Analyzer消息可能应用于内置函数,但不适用于正在调用的重载函数。在这种情况下,在消息出现的行中禁用消息,或者在整个文件中禁用消息。

有关抑制消息的信息,请参见调整代码分析器消息指示器和消息

确定变量的大小或形状

代码分析在确定变量类型和矩阵形状方面的能力有限。代码分析可能产生适合于最常见情况的消息,比如向量。但是,对于不太常见的情况,例如矩阵,这些消息可能不合适。

用超类分析类定义

Code Analyzer使用超类检查类定义的能力有限。例如,Code Analyzer不能总是确定类是否是句柄类,但如果属性继承自超类,则有时可以验证类中使用的自定义属性。在分析类定义时,Code Analyzer尝试使用来自超类的信息,但通常无法获得足够的信息来做出某种判断。

分析类方法

大多数类方法必须至少包含一个与方法属于同一类的对象的参数。但它并不总是第一个参数。当它是,代码分析可以确定一个参数是您正在定义的类的对象,并可以进行各种检查。例如,它可以检查属性和方法名是否存在并且拼写正确。然而,当代码分析不能确定一个对象是您所定义的类的参数时,它就不能提供这些检查。

启用MATLAB编译器部署消息

在处理文件时,通过更改此消息类别的Code Analyzer首选项,可以在显示或隐藏编译器部署消息之间进行切换。您的选择可能取决于您是否正在处理要部署的文件。当您更改首选项时,它也会更改编辑器中的设置。反之亦然——当您从编辑器更改设置时,它将有效地更改此首选项。但是,如果在“编辑器”中修改设置时对话框处于打开状态,则不会看到“首选项”对话框中反映的更改。无论从“编辑器”还是“首选项”对话框更改设置,它都适用于“编辑器”和“代码分析程序报告”。

要启用MATLAB编译器™部署的消息:

  1. 首页选项卡,在环境部分中,点击首选项

    打开Preferences对话框。

  2. 选择MATLAB>代码分析器

  3. 单击搜索字段旁边的向下箭头,然后选择在类别中显示消息>MATLAB编译器(部署)消息

  4. 单击启用类别按钮。

  5. 清除不希望为代码显示的个别消息(如果有的话)。

  6. 决定是否要保存这些设置,以便下次处理要部署的文件时可以重用它们。

的设置三种文件,您可以按照保存和重用代码分析器消息设置,包括此设置的状态。