在大脚本中查找未压缩的行

时间:2016-07-20 14:08:09

标签: matlab

我正在运行一个相当大的脚本。在输出屏幕中,我得到ans = 10

问题是代码非常大,我无法确定此输出的来源。

是否有任何提示可以在MATLAB环境中找到此输出的来源,因为我不希望屏幕上有随机输出?

3 个答案:

答案 0 :(得分:6)

如果是单个脚本文件,您可以通过编程方式调用mlintstruct形式返回所有警告:

L = mlint('my_filename'); % No need for .m at the end

检查结构,您可以看到以下内容:

Variable editor

此结构有一个名为'message'的字段,其中包含各种问题,其中包括我们所追求的问题 - 'Terminate statement with semicolon to suppress output (in functions).'。在这个阶段你可以运行

find( strcmp({L.message},... % output is not suppressed on purpose
     'Terminate statement with semicolon to suppress output (in functions).') ) 

然后检查要打印的行号。

或者,如果您想跳过变量编辑器,或者想要检查.m个文件的整个文件夹,您可以运行mlintrpt(如果是文件夹)或{{1} (在单个文件的情况下)并以下列形式获得报告:

mlintrpt output

答案 1 :(得分:4)

enter image description here

正如路易斯所说:寻找mlint错误。在代码中,它显示为橙色阴影=,橙色在其下方摆动;在右侧的滚动条上,它显示一条橙色线,您可以将鼠标悬停在该线上以查看警告内容,然后单击以转到警告。

此外,我还包括完成的红色错误。这些将导致您的代码无法运行。同样在这里,红色摆动+右边的红线。

最后,右上角的方框,箭头,将是绿色(没有问题),橙色(警告,但代码通常可以运行)或红色(代码赢得不能跑)。

答案 2 :(得分:0)

使用Dev-iL的答案来创建一个简单的函数,它将告诉您未被抑制的代码行。这样您就不需要检查结构L中的返回行。示例:lines = UnsuppressedLines('isEven.m')

function [lines] = UnsuppressedLines( matlabScript)

    l = mlint(matlabScript);
    unsuppressedInstances = find( strcmp({l.message},'Terminate statement with semicolon to suppress output (in functions).') )
    if isempty(unsuppressedInstances)
        fprintf('No unsuppressed lines in script')
        lines = [];
    else
        lines = {l.line};
        lines = lines(unsuppressedInstances);
    end
end