我读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
)
据我所知,对于实际功能中的特定功能,激活echo
不是可能的。除此之外,MATLAB似乎需要事先知道函数是否必须以“echo模式”运行以避免使用 JIT 。
答案 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
我还要补充一点,我可能不会使用这样的方法进行调试。有更好的方法可以弄清楚函数内部发生了什么。