在MATLAB-Simulink项目中查找未使用的变量和函数

时间:2011-01-13 08:33:40

标签: matlab simulink

我有一个复杂的MATLAB-Simulink项目,涉及许多m文件和mdl文件。一些m文件定义了在其他m文件中使用的变量(糟糕的设计,我知道,但它是遗留代码)。还有一些功能不再使用。

我需要一种自动方式来查找未使用的变量和函数,以便我可以删除它们并使整个事情变得不那么复杂。理想情况下,我应该有一个脚本/工具,它将项目根目录的名称作为输入,扫描子目录中的所有文件,并输出所有未在任何m文件或mdl文件中使用的变量和函数。 / p>

我知道我可以找到mdl文件中没有使用的变量(参见Tips and Tricks - Tracking Variables in a Simulink Model)。我想将该方法应用于项目中的所有文件。

我想检测m文件中未使用的变量是暂时将所有m文件合并到一个文件中并在其上运行mlint。有更好的想法吗?

1 个答案:

答案 0 :(得分:7)

不是经历将所有m文件粘贴到一个运行MLINT的繁琐(并且可能容易出错)的任务,而是还有其他几个选项......

如果您将所有文件都放在一个文件夹中,最简单的方法是转到当前文件夹浏览器,点击操作按钮alt text,然后选择报告&gt ;代码分析器报告

alt text

这将打开一个新窗口,显示当前目录中每个m文件的MLINT结果:

alt text

如果您希望使用脚本自动执行该过程而不必单击菜单选项,那么MathWorks文件交换(herehere)上的一些提交似乎有效递归地在目录结构上而不是单个目录。

另外,这里有一些示例代码可以为单个目录执行所需的操作:

dirData = dir;                 %# Get data on the current directory contents
fileIndex = ~[dirData.isdir];                 %# Get an index for the files
fileNames = {dirData(fileIndex).name};        %# Get the file names
[~,~,ext] = cellfun(@fileparts,fileNames,...  %# Get the file extensions
                    'UniformOutput',false);
mFileIndex = strcmp(ext,'.m');                %# Get an index for the m-files
cellfun(@mlint,fileNames(mFileIndex));        %# Run MLINT on each m-file

您可以通过这种方式将文件名(和路径)的集合扩展到operate recursively on a directory tree,然后在您收集的结果文件集上运行MLINT。