В 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