2011-01-13 121 views
6

我有涉及许多M文件和MDL-文件复杂的MATLAB,Simulink的项目未使用的变量和函数。一些M文件定义在一个m文件中使用的变量(糟糕的设计,我知道,但它是旧的代码)。还有一些功能不再使用。查找在MATLAB,Simulink的项目

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

我知道,我能找到未在MDL-文件(见Tips and Tricks - Tracking Variables in a Simulink Model)使用的变量。我想将该方法应用于项目中的所有文件。

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

回答

7

而不是通过粘贴所有M文件到一个运行MLINT的繁琐(可能出错)的任务去的,你有一些其他选项...

如果你把所有的一个文件夹中的文件,最简单的方法是去到当前文件夹浏览器,点击操作按钮alt text,然后选择报告>代码分析器报告

alt text

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

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在您收集的结果文件集上。

+1

谢谢,但这只涵盖了部分问题。假设我有两个文件f1.m和f2.m. f1.m如下:a = 5; B = 3; f2如下:c = a * 2; b没有使用,但是代码分析器报告没有说明这一点。 – Samil 2011-01-24 13:59:36