有谁知道以下更清洁的解决方案:我正在运行一个可能需要在某个时候被杀死的 matlab 脚本。点击“cntrl-C”可以工作,但会在调试中弹出一些随机文件,并且可能仍然会失败,具体取决于图形是否在绘图中间。
我能想到的最好的方法:在我正在查看的图形上添加一个按钮,单击鼠标执行“全部清除”。简单地做“错误”是行不通的,因为它会引发一些 matlab 函数成功捕获并继续运行的异常。
更新/澄清:强制崩溃依赖于清除主脚本中的一些全局变量。
function myScript()
global foo;
foo = 1;
while 1
x = DoStuff();
sh = figure(1);
if k == 1
killable_window( sh );
end
x.display();
drawnow;
y = foo + 1; % <-- crashes if the callback does 'clear all', which kills global variable foo
end
end
然后这是一个可杀死窗口的脏版本:
function [] = killable_window( sh )
S.fh = sh;
S.pb = uicontrol('style','push',...
'units','pix',...
'position',[10 30 80 20],...
'fontsize',12,...
'string','Quit');
set(S.pb,'callback' ,{@pb_call,S})
% Check if 'p' is pressed when focus on button and exec callback
set(S.pb,'KeyPressFcn',{@pb_kpf ,S});
% Check if 'p' is pressed when focus on figure and exec callback
set(S.fh,'KeyPressFcn',{@pb_kpf ,S});
% Callback for pushbutton, clears all variables
function pb_call(varargin)
S = varargin{3}; % Get the structure.
fprintf('force quitting due to button press...\n');
% ghetto: clear everything to force a crash later
% and prevent anyone from successfully catching an exception
clear all;
end
% Do same action as button when pressed 'p'
function pb_kpf(varargin)
if varargin{1,2}.Character == 'p'
pb_call(varargin{:})
end
end
end
所以,如果我不喜欢我所看到的,我点击“退出”按钮,然后它转储回主屏幕,但我在这个过程中丢失了我的变量......有没有办法退出,或者“错误” “防止任何人捕获异常?