脚本和matlab命令窗口之间的区别

时间:2013-06-05 12:52:13

标签: matlab command-line

我想知道在命令窗口输入几行或让脚本执行它们之间的区别是什么。

在问题Escape from nested try - catch statement中,我有一个示例函数。我已将选定的代码放在脚本中并将称为,但是它无法正常工作。另一方面,当我 选择行并点击f9 ,它按预期工作。

这些行是:

dbclear all
dbquit
dbstop if caught error

我将示例函数称为:

dbstop if caught error
mytestmain

示例函数是:

function mytestmain 
try
    mytestsub
catch
end

% Definition of subfunction, may or may not be in the same .m file
function mytestsub
try
    a=b; %Intentionally generate an error as b is not defined
catch
end

2 个答案:

答案 0 :(得分:3)

我认为它与MATLAB的just-in-time (JIT) compiler有关,它在运行它们之前编译函数。

如果设置了dbstop,它似乎会以不同的方式编译函数(请参阅here以供参考)。目前看来,MATLAB在运行时无法重新编译函数(只需尝试在dbstop期间保存更改的函数,您将收到一条消息通知您)。正如您可以在dbstop期间添加和删除断点我认为您也可以通过编程方式执行此操作,但如果在“编译时”没有打开它,则应该无法“打开”调试

所以在你的情况下:

  • 使用F9它只是粘贴和解析,就像您手动输入一样。因此,首先设置dbstop,然后编译并执行mytestmain
  • 作为脚本运行将首先编译脚本和mytestmain,然后执行它 - 因此编译后将设置dbstop,因此无法生效。

答案 1 :(得分:0)

根据“不起作用”的含义,可能只是因为调试器是特殊的上下文和某些调试器命令 - dbupdbdowndbquit - 只有当您在调试器“K>>”时才能工作提示。一旦你调用了一个脚本,你就不再处于调试器提示符下,而是在正常的代码执行中 - 在一个嵌套的M代码调用栈中 - 而且它们在那里不起作用。当您使用F9时,它会单独执行这些行,因此每个行都是从提示符完成的。

作为一种解决方法,如果您真的想要执行这样的一系列调试器命令,您可以编写一个Java Swing小部件,将文本输入到命令窗口,就像您输入它一样。