Остановить и продолжить выполнение от возможного отладчика?

Там какой-либо путь состоит в том, чтобы остановиться, осуществление matlab программы от отладчика как ctrl+c делает, но затем способность продолжить выполнение (как Вы может в, говорит что c#)?

В противном случае там какой-либо лучший путь - к обходному решению это кроме попытки заблаговременно установить точки останова или dbstop операторы в Вашем коде matlab?

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

Эти две опции, которые я в настоящее время использую/рассматриваю,

  1. команды dbstop (или (условные) точки останова) в коде. Недостаток состоит в том, что иногда я не хочу останавливать моделирование на несколько часов, иногда хочу остановиться только после нескольких секунд (и я не обязательно знаю, что заранее) и это не работает хорошо с этим подходом: Если я установил условие повреждения для повреждения каждые 5 минут, я не могу оставить matlab, работающий в течение многих часов без взаимодействия. Если бы я установил условие к выше, то я должен ожидать слишком долго условия совершить нападки.

  2. включайте код, чтобы сохранить рабочую область каждые несколько секунд/минуты и импортировать рабочую область во второй matlab экземпляр. Недостаток состоит в том, что это - огромная стычка и также делает не, обязательно позволяет мне возобновлять, что моделирование с состоянием сохраненной рабочей области затем ступает через код для нескольких повторений.

Я надеюсь, что существует лучшее решение, чем любой из 2. Спасибо за любой совет!

Править: Я думаю, что я собираюсь сделать, записать простую функцию matlab, которая проверяет переменную среды или файл на диске каждое повторение и называет dbstop, если я установил флаг в этом файле или ENV. Таким образом, я могу управлять, когда (и в случае необходимости который из нескольких) точка останова совершает нападки снаружи matlab путем редактирования файла. Грязный, но должен работать.

16
задан Stewie Griffin 14 June 2016 в 08:09
поделиться

2 ответа

Это не обязательно лучший способ, но вы могли бы смоделировать систему сигналов/прерываний на основе файлов. Это можно сделать, проверяя время от времени внутри длинного цикла моделирования существование определенного файла. Если он существует, вы переходите в интерактивный режим с помощью команды 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
17
ответ дан 30 November 2019 в 17:04
поделиться

Вы можете установить условную точку останова в редакторе MATLAB. Для этого также можно использовать DBSTOP . Например, это установит условную точку останова в файле myFcn в строке 20, которая остановит выполнение, когда переменная цикла i кратна 500:

dbstop in myFcn.m at 20 if rem(i,500) == 0

Затем вы можете продолжить выполнение после проверки некоторых из ваших переменных.

4
ответ дан 30 November 2019 в 17:04
поделиться
Другие вопросы по тегам:

Похожие вопросы: