В Matlab можно ли завершить script, но сохранить все внутренние переменные в рабочее пространство?

Я запускаю script, но он занимает слишком много времени, поэтому я хочу закончить script. Однако он рассчитал много данных, которые я бы в идеале не хотел выбрасывать. Есть ли альтернатива ctrl-C, с помощью которой вы сохраняете внутренние функциональные переменные в рабочей области?

В идеале я ищу ярлык для клавиатуры Matlab, например ctrl-C, но если это действительно невозможно сделать, возможно, есть способ сделать это в script моей функции. Любая идея, как позволить моему script реагировать на ctrl-C, а также элемент GUI, который я могу отменить, а затем я сохраняю переменные через script?

Некоторые подобные вопросы я нашел, но это не отвечает на мой вопрос:

закрыть/приостановить

завершение

Разный вопрос, похожий ответ:

dbstop

EDIT:

Этот вопрос отличается от того, что проблема, с которой сталкивается айзер, отличается: они хотят знать, где ошибка, что в моем случае говорит Matlab. Я просто хочу сохранить все данные из рабочей памяти, когда это произойдет.

Ответы

Ответ 1

версии MATLAB 2016a и более поздние версии

Если вы используете версии Matlab после 2016а, на самом деле кнопка паузы появляется при запуске script (как описано @pedre). Это позволяет приостановить script, проверить переменные и затем возобновить их.

Обязательно проверьте следующий раздел, поскольку это может быть удобно.

Старые версии MATLAB

На самом деле трюк заключается в использовании dbstop if error.

Сначала используйте это, затем запустите script. Когда вы вводите ошибку (например, с помощью Ctrl + C), у вас есть возможность вручную проверить/сохранить рабочие области.

Вы не сможете возобновить script.

Ответ 2

Вам просто нужно щелкнуть внутри вашего script, чтобы открыть страницу Editor, а затем нажать паузу и увидеть там все статические значения.

введите описание изображения здесь

Ответ 3

Коллега показал мне альтернативный способ включить это в мою функцию, присоединив команду 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