В Matlab можно ли завершить скрипт, но сохранить все его внутренние переменные в рабочей области?
я запускаю сценарий, но это занимает слишком много времени, поэтому я хочу завершить сценарий. Однако он рассчитал много данных, которые я бы в идеале не хотел выбрасывать. Есть ли альтернатива ctrl-C
с помощью которого вы сохраняете внутренние переменные функции в рабочей области?
В идеале я ищу Matlab сочетания клавиш, такие как ctrl-C
, но если это действительно невозможно сделать, возможно, есть способ сделать это в скрипте моей функции. Любая идея как позволить моему скрипту реагировать на ctrl-C
также, или, может быть, элемент GUI, который я могу отменить, а затем сохранить переменные через мой скрипт?
некоторые подобные вопросы я нашел, но это не ответ на мой вопрос:
другой вопрос, аналогичный ответ:
EDIT:
этот вопрос разные, потому что проблема у asker другая: они хотят знать, где ошибка, что в моем случае Matlab уже говорит. Я просто хочу сохранить все данные из рабочей памяти, когда это произойдет.
3 ответов
версии MATLAB 2016a и более поздние
Если вы используете post 2016a версии Matlab, на самом деле есть кнопка паузы, которая появляется при запуске скрипта (как описано @pedre). Это позволяет приостановить скрипт,проверить переменные, а затем возобновить работу.
убедитесь, что проверить следующий раздел, как это все еще может быть удобно.
старые версии MATLAB
на самом деле трюк заключается в использовании dbstop if error
.
первым использованием это, затем запустите сценарий. Как только вы введете ошибку (например, с Ctrl+C), у вас есть возможность проверить / сохранить рабочие пространства вручную.
вы не сможете продолжить сценарий.
вам просто нужно щелкнуть внутри своего скрипта, чтобы вы могли получить Editor
страница открыта, а затем нажмите пауза, и увидеть все значения стажера там.
коллега показал мне альтернативный способ включить это в мою функцию, прикрепив 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