是否有一种方法可以在执行过程中输出Matlab过程,这样即使在用户中断后也可以输出?
假设在是否有一种方法可以在执行过程中输出Matlab过程,这样即使在用户中断后也可以输出?,matlab,keyboardinterrupt,Matlab,Keyboardinterrupt,假设在func.m中 function out = func(in) for i=1:1000 out=i; end end 输入>>out=func后在Matlab cmd中,用户使用Ctrl+C中断命令执行 在全局工作区中,out不可用,而不是使out等于1到1000之间的某个整数。如果在调用out=func之前定义了out,它将不会被更新 在用户中断时和执行func期间,只要在func中定义了out,是否有办法使其在全局工作区中可用 如果有办法的话,在函数
func.m
中
function out = func(in)
for i=1:1000
out=i;
end
end
输入>>out=func后
在Matlab cmd中,用户使用Ctrl+C中断命令执行
在全局工作区中,out
不可用,而不是使out
等于1到1000之间的某个整数。如果在调用out=func之前定义了out
代码>,它将不会被更新
在用户中断时和执行func
期间,只要在func
中定义了out
,是否有办法使其在全局工作区中可用
如果有办法的话,在函数因为抛出错误而被中断的情况下,同样的方法会起作用吗
(如果所获得的便利是关于一个单一功能的话,这可能看起来微不足道。毕竟,向硬盘驱动器写入数据和以后从硬盘驱动器读取数据始终是一种选择——尽管不是一种有效的选择。多年来,在很多功能中,这样的功能对我来说都是方便的,并且可以提高我的工作效率。所以我最后问了。)因此,这里有一个解决方案,允许通过按下消息框上的按钮来中断循环。。。。不是ctrl-c,而是中断循环的另一种方式:
function out=interrupted_loop_example(in)
f = msgbox('break the loop?') ;
%---------- this is a sample loop:
out=in;
while(~breakloop(f))
out=out+1;
end
%--------------------------------
% clean up:
if ishandle(f) ; delete(f) ; end % to kill the msgbox
% helper function
function x = breakloop(f)
drawnow ; % allowing matlab to detect a button was pressed
x = ~ishandle(f) ;
复制函数,运行它,例如,中断的循环\u示例(100)
,按下按钮时查看ans,基本上决定何时中断循环。当然,这样做会对性能造成损失,但您在问题中没有提到任何有关性能的内容。我想标记一些“中断”,但中断标记有一个相当具体的含义。我不知道还有哪一个标签是正确的。我不想建议这样做,但是把out
作为一个全局变量就可以了。但这会减慢函数的速度,并可能导致难以跟踪的错误。@CrisLuengo:有没有办法让函数在ctrl+c或抛出Matlab本机错误后真正停止之前执行某些操作?我在想:如果是这样的话,那就把变成全球的;否则,正常。JFTR:您不能捕获CTRL-C“因为抛出错误而中断函数的位置”,或者您可以设置dbstop if error
,当抛出错误时调试器会出现,您可以检查调用堆栈所有级别的所有变量的值。我不认为这捕捉到了Ctrl+C。