有没有办法找到丢失的.m文件的引用函数?

时间:2011-04-08 08:15:31

标签: matlab dependencies code-analysis

当Matlab解释器解释未在.m文件中实现的函数时,会发生运行时错误。有没有办法在“编译时”找到这些错误,即是否有一个脚本解析我的matlab代码,检查所有被调用的函数并告诉我哪些.m - 文件丢失(关于我定义的路径)? / p>

1 个答案:

答案 0 :(得分:2)

快速回答:否。

Depfun 本来是我作为此问题的解决方案的第一个猜测,但它只提供了路径上存在的依赖项列表,而不是那些不存在的依赖项。同样地, mlint mlintmex 对我来说并不像我希望的那样有用。

我认为其原因如下:函数调用和下标的语法在MATLAB中是相同的。

判断foo(bar)是否是对“foo.m”的函数调用或尝试下标到矩阵“foo”的唯一方法是执行到该点的代码,并查看矩阵“foo”存在于范围中和/或如果路径上存在foo.m.如果两者都存在,则MATLAB的优先规则决定符号“foo”是作为函数调用还是作为下标操作处理。

在下面的玩具示例中,表达式“ambiguous(1:9)”首先被视为函数调用,然后作为下标操作:

function test

    disp( ambiguous( 1:9 ) )
    ambiguous = 'data item';
    disp( ambiguous( 1:9 ) )

end
function szMsg = ambiguous( anArgument )
    szMsg = 'function call';
end

也可以使用 eval evalin 创建变量,并操纵MATLAB路径以将m文件带入和移出作用域。所有这些原因都促使解决这个问题的方法对于一般情况来说是不切实际的(甚至可能是不可能的)。