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

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

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

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

закрыть/пауза

завершить

другой вопрос, аналогичный ответ:

dbstop

EDIT:

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

3 ответов


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

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

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

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

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

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

вы не сможете продолжить сценарий.


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

enter image description here


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