我想知道在命令窗口输入几行或让脚本执行它们之间的区别是什么。
在问题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
答案 0 :(得分:3)
我认为它与MATLAB的just-in-time (JIT) compiler有关,它在运行它们之前编译函数。
如果设置了dbstop
,它似乎会以不同的方式编译函数(请参阅here以供参考)。目前看来,MATLAB在运行时无法重新编译函数(只需尝试在dbstop
期间保存更改的函数,您将收到一条消息通知您)。正如您可以在dbstop
期间添加和删除断点我认为您也可以通过编程方式执行此操作,但如果在“编译时”没有打开它,则应该无法“打开”调试
所以在你的情况下:
F9
它只是粘贴和解析,就像您手动输入一样。因此,首先设置dbstop
,然后编译并执行mytestmain
。mytestmain
,然后执行它 - 因此编译后将设置dbstop
,因此无法生效。答案 1 :(得分:0)
根据“不起作用”的含义,可能只是因为调试器是特殊的上下文和某些调试器命令 - dbup
,dbdown
和dbquit
- 只有当您在调试器“K>>”时才能工作提示。一旦你调用了一个脚本,你就不再处于调试器提示符下,而是在正常的代码执行中 - 在一个嵌套的M代码调用栈中 - 而且它们在那里不起作用。当您使用F9时,它会单独执行这些行,因此每个行都是从提示符完成的。
作为一种解决方法,如果您真的想要执行这样的一系列调试器命令,您可以编写一个Java Swing小部件,将文本输入到命令窗口,就像您输入它一样。