在Matlab中,是否可以终止脚本,但将所有内部变量保存到工作区?

时间:2013-09-25 13:12:44

标签: matlab save workspace keyboardinterrupt

我正在运行一个脚本,但这花了太长时间,所以我想终止脚本。然而,它已经计算了很多我理想情况下不想丢弃的数据。是否有ctrl-C的替代方法可以将内部函数变量保存到工作区?

理想情况下,我正在寻找像ctrl-C这样的 Matlab 键盘快捷键,但如果真的无法完成,也许有一种方法可以在我的函数脚本中执行此操作。知道如何让我的脚本对ctrl-C作出反应,或者我可以取消的GUI元素,然后通过我的脚本保存变量?

我发现了一些类似的问题,但这些问题没有回答我的问题:

close/pause

terminate

不同的问题,类似的答案:

dbstop

编辑:

这个问题不同,因为提问者的问题不同:他们想知道错误的位置,在我的案例中,Matlab已经说过了。我只想在工作内存中保留所有数据。

3 个答案:

答案 0 :(得分:36)

MATLAB版本2016a及更高版本

如果您使用的是2016a版本的Matlab,则在运行脚本时会出现一个暂停按钮(如@pedre所述)。这允许您暂停脚本,检查变量,然后继续。

请务必查看下一部分,因为这可能仍然很方便。

较旧的MATLAB版本

实际上诀窍是使用dbstop if error

首先使用它,然后运行你的脚本。一旦引入错误(例如,使用 Ctrl + C ),您就有机会手动检查/保存工作区。

您将无法恢复脚本。

答案 1 :(得分:3)

您只需在脚本中单击即可打开Editor页面,然后按暂停,然后查看所有实习值。

enter image description here

答案 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