Там какой-либо путь состоит в том, чтобы остановиться, осуществление matlab программы от отладчика как ctrl+c делает, но затем способность продолжить выполнение (как Вы может в, говорит что c#)?
В противном случае там какой-либо лучший путь - к обходному решению это кроме попытки заблаговременно установить точки останова или dbstop операторы в Вашем коде matlab?
Я хотел бы смочь прервать длительное моделирование, чтобы посмотреть на текущее состояние и затем продолжить моделирование.
Эти две опции, которые я в настоящее время использую/рассматриваю,
команды dbstop (или (условные) точки останова) в коде. Недостаток состоит в том, что иногда я не хочу останавливать моделирование на несколько часов, иногда хочу остановиться только после нескольких секунд (и я не обязательно знаю, что заранее) и это не работает хорошо с этим подходом: Если я установил условие повреждения для повреждения каждые 5 минут, я не могу оставить matlab, работающий в течение многих часов без взаимодействия. Если бы я установил условие к выше, то я должен ожидать слишком долго условия совершить нападки.
включайте код, чтобы сохранить рабочую область каждые несколько секунд/минуты и импортировать рабочую область во второй matlab экземпляр. Недостаток состоит в том, что это - огромная стычка и также делает не, обязательно позволяет мне возобновлять, что моделирование с состоянием сохраненной рабочей области затем ступает через код для нескольких повторений.
Я надеюсь, что существует лучшее решение, чем любой из 2. Спасибо за любой совет!
Править: Я думаю, что я собираюсь сделать, записать простую функцию matlab, которая проверяет переменную среды или файл на диске каждое повторение и называет dbstop, если я установил флаг в этом файле или ENV. Таким образом, я могу управлять, когда (и в случае необходимости который из нескольких) точка останова совершает нападки снаружи matlab путем редактирования файла. Грязный, но должен работать.
Это не обязательно лучший способ, но вы могли бы смоделировать систему сигналов/прерываний на основе файлов. Это можно сделать, проверяя время от времени внутри длинного цикла моделирования существование определенного файла. Если он существует, вы переходите в интерактивный режим с помощью команды keyboard
.
Что-то вроде:
CHECK_EVERY = 10; %# like a polling rate
tic
i = 1; %# loop counter
while true %# long running loop
if rem(i,CHECK_EVERY) == 0 && exist('debug.txt','file')
fprintf('%f seconds since last time.\n', toc)
keyboard
tic
end
%# ... long calculations ...
i = i + 1;
end
Вы запускаете симуляцию как обычно. Когда вы захотите вмешаться в код, просто создайте файл debug.txt
(вручную, то есть), выполнение остановится, и вы получите подсказку:
2.803095 seconds since last time.
K>>
Затем вы можете проверить свои переменные как обычно.... Чтобы продолжить, просто выполните return
(не забудьте временно переименовать или удалить файл). Чтобы выйти, используйте dbquit
EDIT: Только что пришло в голову, что вместо проверки наличия файлов, более простым решением было бы использовать фиктивную фигуру в качестве флага (пока фигура открыта, продолжайте выполнение).
hFig = figure; drawnow
while true
if ~ishandle(hFig)
keyboard
hFig = figure; drawnow
end
%# ...
pause(0.5)
end
Вы можете установить условную точку останова в редакторе MATLAB. Для этого также можно использовать DBSTOP . Например, это установит условную точку останова в файле myFcn
в строке 20, которая остановит выполнение, когда переменная цикла i
кратна 500:
dbstop in myFcn.m at 20 if rem(i,500) == 0
Затем вы можете продолжить выполнение после проверки некоторых из ваших переменных.