18

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

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

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

关闭/暂停

终止

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

数据库停止

编辑:

这个问题是不同的,因为提问者的问题是不同的:他们想知道错误在哪里,在我的例子中,Matlab 已经说过了。我只想在它发生时将所有数据保留在工作内存中。

4

3 回答 3

37

MATLAB 版本 2016a 及更高版本

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

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

旧的 MATLAB 版本

其实诀窍是使用dbstop if error.

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

您将无法恢复脚本。

于 2013-09-25T13:36:20.100 回答
3

您只需在脚本内部单击,即可Editor打开页面,然后按暂停,并查看那里的所有实习生值。

在此处输入图像描述

于 2016-06-20T18:32:41.940 回答
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
于 2013-09-25T14:15:51.137 回答