MATLAB在函数内部“回显”。可能吗?

时间:2011-11-04 14:15:47

标签: matlab

我读in the documentation我可以使用语句echo on;让MATLAB打印它执行的语句。但是,我很难在函数中完成这项工作。

例如:

function do_something(foo)

a   = 2;
echo on;
foo = foo+1;
disp('This is a test');
foo = foo+3;

end

如果我从命令窗口调用do_something(foo),我希望看到类似的内容:

foo = foo+1;
disp('This is a test');
This is a test
foo = foo+3;

但是,在上面的示例中,所有MATLAB打印都是:

this is a test

这不是我所期待的。

更新

正如@Phonon在下面解释的那样,echo on仅适用于脚本(抱歉,我错过了!)。但是,我在文档中读到我可以为给定函数激活echo,如下所示:

echo fcnname on

所以现在我的问题是,有没有办法使用上面语法的一些变体来激活函数的echo,以便我在函数中执行此操作(调用echo? (在这种情况下保存函数名的变量将由mfilename

提供

更新2:

据我所知,对于实际功能中的特定功能,激活echo 是可能的。除此之外,MATLAB似乎需要事先知道函数是否必须以“echo模式”运行以避免使用 JIT

3 个答案:

答案 0 :(得分:6)

根据Matlab文档,即help echo

  

ECHO ON打开脚本文件中的命令回显。

它不适用于内部功能。为了使其适用于功能,根据相同的帮助文件,

  

ECHO ON ALL打开当前在内存中的任何Function文件内的命令回显(即INMEM返回的函数)。

     

ECHO OFF ALL将他们全部关闭。

<强>更新

为了找到您目前所处的功能,我看到的最佳方式是调用dbstack。有点如下:

[S,I] = dbstack;
funcName = S.name;

答案 1 :(得分:1)

echo fcnname on

相同
echo('fcnname','on');

使用函数调用语法,您可以改为传递变量:

echo(found_found, 'on');

答案 2 :(得分:0)

我认为函数内部没有回声。您始终可以使用以下方法在函数外部打开echo:

foo = 1;
echo do_something on;
do_something(foo);
echo do_something off;

不使用它的唯一原因是,如果您只想显示部分功能而不是所有线路。如果您坚持查看函数特定部分的行和结果,那么对于有限数量的行执行此操作的粗略方式将是:

s = {'foo = 1;'
     'foo = foo+1;'
     'disp(''This is a test'');'
     'foo = foo+3;'
     'foo'
    };
for i = 1:numel(s)
   disp(s{i}); eval(s{i});
end

将显示:

foo = 1;
foo = foo+1;
disp('This is a test');
This is a test
foo = foo+3;
foo

foo =

     5    

我还要补充一点,我可能不会使用这样的方法进行调试。有更好的方法可以弄清楚函数内部发生了什么。