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

17

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

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

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

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

завершить

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

dbstop

EDIT:

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

    
задан Leo 25.09.2013 в 15:12
источник

3 ответа

34

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

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

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

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

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

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

Вы не сможете возобновить выполнение сценария.

    
ответ дан Dennis Jaheruddin 25.09.2013 в 15:36
источник
3

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

    

ответ дан Pedro Luque 20.06.2016 в 20:32
источник
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
    
ответ дан Leo 25.09.2013 в 16:15
источник