我正在运行一个脚本,但这花了太长时间,所以我想终止脚本。然而,它已经计算了很多我理想情况下不想丢弃的数据。是否有ctrl-C
的替代方法可以将内部函数变量保存到工作区?
理想情况下,我正在寻找像ctrl-C
这样的 Matlab 键盘快捷键,但如果真的无法完成,也许有一种方法可以在我的函数脚本中执行此操作。知道如何让我的脚本对ctrl-C
作出反应,或者我可以取消的GUI元素,然后通过我的脚本保存变量?
我发现了一些类似的问题,但这些问题没有回答我的问题:
不同的问题,类似的答案:
编辑:
这个问题不同,因为提问者的问题不同:他们想知道错误的位置,在我的案例中,Matlab已经说过了。我只想在工作内存中保留所有数据。
答案 0 :(得分:36)
如果您使用的是2016a版本的Matlab,则在运行脚本时会出现一个暂停按钮(如@pedre所述)。这允许您暂停脚本,检查变量,然后继续。
请务必查看下一部分,因为这可能仍然很方便。
实际上诀窍是使用dbstop if error
。
首先使用它,然后运行你的脚本。一旦引入错误(例如,使用 Ctrl + C ),您就有机会手动检查/保存工作区。
您将无法恢复脚本。
答案 1 :(得分:3)
答案 2 :(得分:2)
一位同事向我展示了另一种方法,将此功能合并到我的功能中,方法是将save()
命令附加到取消waitbar
,如下所示:
%appoint emergency file location
emergencysave = char(inputdlg({'fill in here:'}, 'windowtitle', 1, 'c:\defaultstringhere.mat'));
%or just emergencysave = 'c:\emergencysave.mat';
%create some GUI element you can cancel
times = 10;
wbinfo = struct('curlength', {0.0});
wb = waitbar(wbinfo.curlength);
wbinfo.wb = wb;
%attach save() to cancelling
anyimportantvariable = [];
for i=1:times
anyimportantvariable = [anyimportantvariable, i^2];
wbinfo.curlength = i/times;
try
waitbar(wbinfo.curlength, wb)
catch
save(emergencysave, 'anyimportantvariable');
return;
end