2013-09-17 2 views
7

В MATLAB у меня запущен некоторый код, на выполнение которого требуется некоторое время. Я хотел бы приостановить код, чтобы проверить некоторые значения переменных. Есть ли способ, которым я могу это сделать без необходимости повторного запуска кода с самого начала? Я не хочу прерывать программу; просто приостановите его.Можете ли вы приостановить MATLAB?

+1

Возможно, вам будет интересно узнать больше о функциях отладки в Matlab - http://www.mathworks.com/help/matlab/matlab_prog/debugging-process-and-features.html#brqxeeu-184 – marsei

+0

возможно, этот подход может помочь, если вы хотите интерактивно приостановить код, ввести режим отладки, просмотреть переменные, а затем продолжить выполнение: http://stackoverflow.com/a/3273167/97160 – Amro

ответ

3

Один из способов добиться того, что вы ищете, - использовать code sections (также называемый кодовыми ячейками), где вы разделите свой код на разделы, разделенные строками с двумя знаками процента (%%).

Затем в редакторе, вы можете нажать Ctrl +ввести для выполнения текущего раздела кода и Ctrl + вверх/вниз для перемещения между разделами.

+0

Это неверно. Почему голос? То же самое для моего ответа на то пошло. – chappjc

+0

@chappjc: Ну, у Андреаса есть точка, которая с 'pause', вы не можете проверить переменные рабочей области. Для меня это одно не было бы причиной нисходящего потока, хотя, и ваше решение даже не имеет этой проблемы. – Junuxx

+1

Убрано предложение 'pause', так как оно не соответствовало потребностям OP и расширилось в пояснениях разделов кода. – Junuxx

1

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

Возможно, вы хотите установить точку останова (см. Меню отладки/клавишу F12).

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

+0

Вы можете вставить точку останова, используя функцию 'keyboard', без использования Matlab IDE, что мне не нравится, кстати. Nvm, chappjc уже заявил об этом x) – Werner

6

Вы можете остановить выполнение и дать командную строку два способов, о которых я знаю:

  • Введение keyboard в коде, где вы хотите остановиться.
  • Установка контрольной точки.

Вы можете возобновить и остановить выполнение с помощью dbcont и dbquit, соответственно. Чтобы сделать шаг вперед, используйте dbstep. dbstack позволяет узнать, где вы находитесь. Есть еще много команд. Страница помощи для любого из них даст вам другие предложения.

Как указал Деннис Джахерддин, dbstop также имеет несколько полезных функций, которые стоит попробовать. В частности, это возможность устанавливать условные и глобальные (любые строки, соответствующие критерию) точки останова через синтаксис dbstop if. Например, dbstop if error разбивается на командную строку отладки при любой ошибке. Одно из предложений, которое я сделал сейчас, заключается в том, чтобы поставить dbstop if error в startup.m, чтобы это поведение было по умолчанию при запуске MATLAB. Возможно, вам придется создать этот файл в папке userpath; edit(fullfile(regexp(userpath,'^[^;]*','match','once'),'startup.m')).

+1

Обратите внимание, что точки останова позволяют вам устанавливать условия (просто щелкните правой кнопкой мыши на одном). Это позволяет легко останавливать каждую 100-ю итерацию, например, или когда выполняется определенное условие. Также смотрите 'help dbstop'. –

1

Я не уверен, что пользователи Windows, но если вы работаете в Linux вы можете запустить Matlab в терминале с помощью

matlab -nodesktop 

затем один раз Matlab начал, компакт-диск в директорию вашего проекта и запустите скрипт Matlab , Теперь, когда вы хотите приостановить выполнение, вы можете использовать ctrl-Z. Затем возобновить тип fg. Надеюсь, это поможет.