主要内容

使用代码分析器检查代码中的错误和警告

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

启用连续代码检查

要启用连续代码检查,请在首页选项卡,在环境部分中,点击首选项.选择MATLAB>代码分析器,然后选择启用集成的警告和错误消息复选框。设置突显出选项在警告和错误下划线

启用连续代码检查时,MATLAB将在编辑器和实时编辑器中显示关于代码的警告和错误消息。例如,示例文件lengthofline.m包含多个错误和警告。将文件复制到当前文件夹中,然后在编辑器中打开。

拷贝文件(fullfile (matlabroot‘帮助’,‘techdoc’,‘matlab_env’,“例子”,“lengthofline.m”))fileattrib(‘lengthofline.m’,' + w ');编辑(“lengthofline.m”)

查看文件的代码分析器状态

当您在编辑器或实时编辑器中打开文件时,指示栏顶部的消息指示器将显示该文件的整体代码分析器状态。

消息指示器 描述
红色错误符号

文件包含语法错误或其他重大问题。

黄色警告标志

文件包含警告或改进机会,但没有错误。

绿色对号符号

文件中没有错误、警告或改进机会。

例如,在lengthofline.m,消息指示符为红色错误符号,意味着该文件至少包含一个错误。

在“编辑器”中,指示栏中显示红色错误符号

查看代码分析器消息

要转到包含消息的第一个代码片段,请单击消息指示器。标识的代码片段用红色下划线表示错误,用橙色下划线表示警告和改进机会。如果文件包含一个错误,单击消息指示器会将您带到第一个错误。

例如,在lengthofline.m,当单击消息指示器时,光标移动到第47行,即第一个错误发生的地方。MATLAB在指示栏中的错误标记旁边显示该行的错误。多条消息可以表示单个问题或多个问题。处理一条消息可能会处理所有消息。或者,在你处理完一条信息后,其他信息可能会改变,或者你需要做的事情会变得更清楚。

在“编辑器”中单击消息指示符后,单击“长线”文件。在指示栏的错误标记旁边显示了三个错误。

要转到包含消息的下一个代码片段,请单击消息指示器。您还可以单击指示器栏中的标记,以转到该标记所代表的行。例如,单击中指标栏上的第一个标记lengthofline.m.光标移动到第21行开头。

若要查看代码片段的消息,请在带下划线的代码片段内移动鼠标指针。或者,您可以将光标定位在带下划线的代码片段中,然后按下Ctrl + M.如果该消息有其他信息,则该消息包含细节按钮。单击按钮以显示附加信息和任何建议的用户操作。

在编辑器中显示带有详细信息按钮的警告消息

修复代码中的问题

对于代码文件中的每条消息,修改代码以解决消息中指出的问题。当您修改代码时,消息指示符和下划线将被更新以反映您所做的更改,即使您没有保存文件。

例如,在第47行lengthofline.m时,该消息提示分隔符不平衡。当您在每个分隔符上移动方向键时,MATLAB似乎并不表示不匹配。但是,代码分析在中检测分号数据{3}(,)并把它理解为一个陈述的结束。

在“编辑器”中单击消息指示符后,单击“长线”文件。在指示栏的错误标记旁边显示了三个错误。

要修复第47行中的问题,请更改数据{3}(,){3}数据(:).单个更改处理了第47行上的所有消息,并且该行不再出现下划线。因为更改删除了文件中的唯一错误,所以该栏顶部的消息指示器从红色错误符号黄色警告标志这表明,只有警告和潜在的改进仍然存在。

对于某些消息,MATLAB提供了一个自动修复程序,您可以应用它来修复问题。如果某个问题有自动修复程序,则代码片段将高亮显示,并且消息中包含修复按钮。

在编辑器中显示带有修复按钮的警告消息

例如,在第27行lengthofline.m,将鼠标放在带下划线和高亮显示的代码片段上刺激.显示信息中包含修复按钮。

如果您从以前的经验中知道如何修复该问题,请单击修复按钮。如果您不熟悉这个问题,右键单击突出显示的代码。上下文菜单中的第一项显示了建议的修复。选择要应用修复的项目。

在编辑器中显示上下文菜单中的长线文件。菜单中的第一项是建议的修复。

如果一个问题存在多个实例,MATLAB可能提供对所有问题实例应用建议的修复。要将修复应用于问题的所有实例,右键单击突出显示的代码并选择修复全部(n)这个问题的实例.此选项不适用于所有建议的修复。

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

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

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

您可以为文件夹中的所有文件创建Code Analyzer消息的报告。

为文件夹中的所有文件创建报告:

  1. 在“当前文件夹”浏览器中,单击显示当前文件夹操作箭头按钮。

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

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

  4. 保存修改后的文件。

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

要为单个MATLAB代码文件创建报告,请使用mlintrpt函数。例如,为示例文件创建一个报告lengthofline.m,输入mlintrpt(“lengthofline.m”)在命令窗口。

有关更多信息,请参见MATLAB代码分析器报告

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

您可以指定最适合当前开发阶段的编码问题的下划线类型。例如,在第一次编码时,您可能更喜欢只在错误下划线,因为警告可能会分散注意力。要更改下划线首选项,请在首页选项卡,在环境部分中,点击首选项.选择MATLAB>代码分析器,然后选择一个突显出选择。

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

您可以通过以下方式抑制(关闭)警告和错误消息的指示器:

  • 在当前文件中删除消息的实例。

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

  • 在所有文件中禁用消息的所有实例。

您不能抑制错误消息,例如语法错误。

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

您可以在当前文件中抑制代码分析器消息的特定实例。例如,删除示例文件中第48行上的消息lengthofline.m,右键单击第48行上的第一个下划线并选择禁止使用分号终止语句…>在这一行

评论% #好< NOPRT >出现在该行的末尾,它指示MATLAB抑制用分号终止语句以抑制输出(在函数中)代码分析器消息。消息指示栏中的下划线和标记将消失。

如果一行包含两个不想显示的消息,分别右键单击每个下划线,然后从上下文菜单中选择适当的条目。的% #好吧语法扩展。例如,在示例文件的第48行中屏蔽两条消息lengthofline.m添加注释% #好< NBRAK, NOPRT >在队伍的最后。

即使将Code Analyzer首选项设置为启用此消息,也不会出现被抑制消息的特定实例,因为% #好吧优先于首选项设置。如果您稍后决定要显示用分号终止语句以抑制输出(在函数中)代码分析器消息为该行,删除% #好< NOPRT >从线上开始。

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

您可以在当前文件中禁用特定Code Analyzer消息的所有实例。例如,删除示例文件中第48行消息的所有实例lengthofline.m,右键单击第48行上的第一个下划线并选择禁止使用分号终止语句…>在此文件中

评论% #好< * NOPRT >的所有实例,该实例指示MATLAB抑制用分号终止语句以抑制输出(在函数中)当前文件中的代码分析器消息。消息指示栏中与此消息对应的所有下划线和标记将消失。

如果一行包含两条消息,而您不希望在当前文件的任何位置显示它们,则分别右键单击每个下划线,并从上下文菜单中选择适当的条目。的% #好吧语法扩展。例如,在示例文件的第48行中屏蔽两条消息lengthofline.m添加注释% #好< * NBRAK, * NOPRT >

即使将代码分析器首选项设置为启用此消息,该消息也不会出现,因为% #好吧优先于首选项设置。类的所有实例用分号终止语句以抑制输出(在函数中)代码分析器消息中的当前文件,删除% #好< * NOPRT >从线上开始。

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

您可以禁用所有文件中代码分析器消息的所有实例。例如,在示例文件中第48行消息的所有文件中删除所有实例lengthofline.m,右键单击第48行上的第一个下划线并选择禁止使用分号终止语句…>在所有文件中.此选项修改代码分析器首选项。

如果你知道你想要抑制哪些消息,你可以直接使用代码分析器首选项禁用它们:

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

  2. 选择MATLAB>代码分析器

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

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

  5. 点击好吧

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

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

保存设置到文件。

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

  2. 选择MATLAB>代码分析器

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

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

  5. 点击好吧

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

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

  2. 选择MATLAB>代码分析器

  3. 打开活动设置列出并选择浏览

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

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

理解包含抑制消息的代码

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

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

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

  • 在Code Analyzer首选项窗格中清除消息。

  • 这些消息在默认情况下是禁用的。

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

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

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

  3. 选择MATLAB>代码分析器

  4. 在搜索字段中,键入是否:后面跟着步骤1中的一个消息id。消息列表现在只包含与该ID对应的消息。如果该消息是一个超链接,请单击它以查看该消息的解释和建议操作。结果可以深入了解消息被抑制或禁用的原因。

    包含搜索字符串和结果搜索结果的搜索字段

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

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

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

理解代码分析的局限性

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

  • 代码分析有时不能在您期望的地方生成代码分析器消息。

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

  • 代码分析有时会产生不适用于您的情况的消息。

    单击细节按钮以显示邮件的其他信息,可帮助您确定该邮件是否适用于您的情况。错误消息几乎总是问题所在。然而,许多警告都是建议查看代码中不寻常的东西,但在您的情况下可能是正确的。

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

    有关更多信息,请参见调整代码分析器消息指示器和消息

区分函数名和变量名

代码分析不能总是区分函数名和变量名。对于下面的代码,如果启用了代码分析器消息,代码分析将返回该消息,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编译器部署消息之间进行切换。您的选择可能取决于您是否正在处理要部署的文件。更改此首选项也会更改编辑器中的设置。同样,在编辑器中更改设置也会更改此首选项。但是,如果在“编辑器”中修改设置时打开了“代码分析器”首选项,则更改不会反映在“首选项”窗口中。无论您是在“编辑器”还是“首选项”窗口中更改设置,更改都适用于“编辑器”和“代码分析程序报告”。

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

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

  2. 选择MATLAB>代码分析器

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

  4. 单击启用类别按钮的右侧MATLAB编译器(部署)消息分类标题。

  5. 清除不希望为代码显示的单个消息。

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

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

另请参阅

|

相关的话题