Отладьте файлы кода MATLAB

Начиная с R2021b. Отладка замен программа MATLAB (R2021a) и код отладки в Live Editor (R2021a).

Можно диагностировать проблемы в MATLAB® файлы кода путем отладки кода в интерактивном режиме в Редакторе и Live Editor или программно при помощи функций отладки в Командном окне.

Существует несколько способов отладить ваш код:

  • Отображаемый вывод путем удаления точек с запятой.

  • Запустите код к определенной линии и сделайте паузу путем нажатия кнопки Run to Here.

  • Продвиньтесь в функции и скрипты, в то время как приостановлено путем нажатия кнопки Step In.

  • Добавьте точки останова в свой файл, чтобы позволить делать паузу в определенных линиях, когда вы запустите свой код.

Прежде чем вы начнете отлаживать, избегать неожиданных результатов, сохраните свои файлы кода и убедитесь, что файлы кода и любые файлы, которые они вызывают, существуют на пути поиска файлов или в текущей папке. MATLAB обрабатывает несохраненные изменения по-другому в зависимости от того, откуда вы отлаживаете:

  • Редактор — Если файл содержит несохраненные изменения, MATLAB, сохранил файл прежде, чем запустить его.

  • Live Editor — MATLAB запускает все изменения в файле, сохранены ли они или нет.

  • Командное окно — Если файл содержит несохраненные изменения, MATLAB, запускает сохраненную версию файла. Вы не видите результаты своих изменений.

Отображение Вывода

Один способ определить, где проблема происходит в вашем файле кода MATLAB, состоит в том, чтобы отобразить вывод. Чтобы отобразить вывод для линии, удалите точку с запятой из конца той линии. В Редакторе MATLAB отображает вывод в Командном окне. В Live Editor MATLAB отображает вывод со строкой кода, которая создает его.

Например, предположите, что у вас есть скрипт под названием plotRand.m это строит вектор из случайных данных и проводит горизонтальную линию на графике в среднем значении.

n = 50;
r = rand(n,1);
plot(r)

m = mean(r);
hold on
plot([0,n],[m,m])
hold off
title('Mean of Random Uniform Data')

Отображать вывод rand функция в линии два, удалите точку с запятой в конце линии. MATLAB отображает значение r в Командном окне.

Command window showing a call to the plotRand function followed by the resulting output, the value of r

В Live Editor MATLAB отображает значение r с линией два.

plotRand live script with the semicolon removed from the end of line two and the resulting output, the value of r, displayed on the right

Отладьте при помощи кнопки Run to Here

Если вы хотите отобразить состояние одной переменной, отображение вывода полезно. Чтобы исследовать состояние всех переменных в рабочей области, запустите свой файл кода, и затем сделайте паузу прежде, чем запустить заданную строку кода.

Чтобы запустить код к заданной линии, и затем сделать паузу, нажимают кнопку Run to Here слева от линии. Если выбранная линия не может быть достигнута, MATLAB продолжает запускаться, пока конец файла не достигнут, или с точкой останова сталкиваются.

Примечание

В функциях и классах, кнопка Run to Here доступна только при отладке.

Например, нажмите кнопку Run to Here слева от линии два в plotRand.m. MATLAB запускает plotRand.m запуск в линии один и делает паузу перед рабочей линией два.

plotRand script with the Run to Here button displayed in the left margin, next to the line number for line two

Когда MATLAB делает паузу, несколько изменений происходят:

  • Кнопка Run во вкладке Editor или Live Editor превращается в кнопку Continue.

  • Подсказка в Командном окне превращается в K>> указание, что MATLAB находится в режиме отладки и что клавиатура сознает ситуацию.

  • MATLAB указывает на линию, в которой он приостановлен при помощи зеленой стрелы и зеленого выделения.

    plotRand script with a green arrow and green highlighting on line two, indicating that MATLAB is paused at line two

Совет

Это - хорошая практика, чтобы не изменять файл, в то время как MATLAB приостановлен. Изменения, которые внесены, в то время как MATLAB приостановлен, не запускаются, пока MATLAB не закончил запускать код, и код повторно выполняется.

Линия, в которой приостановлен MATLAB, не запускается, пока вы не продолжаете запускать код. Чтобы продолжить запускать код, нажмите кнопку Continue. MATLAB продолжает петлять, пока он не достигает конца файла или точки останова. Также можно нажать кнопку слева от строки кода, к которой вы хотите продолжить запускаться.

Чтобы продолжить запускать код линию за линией, на вкладке Editor или Live Editor, нажимают Step. MATLAB выполняет текущую линию, в которой он приостановлен и паузы в следующей строке.

plotRand script with a green arrow and green highlighting on line three, indicating that MATLAB is paused at line three

Просмотрите значение переменных в то время как отладка

Чтобы просмотреть значение переменной, в то время как MATLAB приостановлен, установите свой курсор на переменную. Текущее значение переменной появляется во всплывающей подсказке. Всплывающая подсказка остается в поле зрения, пока вы не перемещаете курсор. Чтобы отключить всплывающие подсказки, перейдите к вкладке View и нажмите кнопку Datatips прочь.

plotRand script paused at line two with a data tip showing the value of the variable n

Также можно просмотреть значение переменной путем введения имени переменной в Командном окне. Например, чтобы видеть значение переменной n, введите n и нажмите Enter. Командное окно отображает имя переменной и его значение. Чтобы просмотреть все переменные в текущей рабочей области, используйте браузер Рабочей области.

Для получения дополнительной информации смотрите, Исследуют Значения В то время как Отладка.

Приостановка рабочего файла

Можно приостановить длительный код, в то время как он запускается, чтобы проверить прогресс и гарантировать, что он запускается как ожидалось. Чтобы приостановить под управлением код, перейдите к вкладке Editor или Live Editor и нажмите кнопку Pause. MATLAB делает паузу в следующей исполняемой линии и изменениях кнопки Pause в кнопке Continue. Чтобы продолжить запускать код, нажмите кнопку Continue.

Примечание

Нажатие кнопки Pause может заставить MATLAB делать паузу в файле вне вашего собственного кода.

Продвиньтесь в функции

При отладке можно продвинуться в названные файлы, делающие паузу в точках, где вы хотите исследовать значения. Чтобы продвинуться в файл, нажмите кнопку Step In непосредственно слева от функции, в которую вы хотите продвинуться. MATLAB отображает кнопку, только если линия содержит вызов другой функции. После вступания нажмите кнопку Step Out наверху файла, чтобы запустить остальную часть вызванной функции, оставить вызванную функцию, и затем сделать паузу.

По умолчанию кнопка Step In доступна только для пользовательских функций и скриптов. Сделать кнопку активной для MathWorks® функции, на вкладке Home, в разделе Environment, нажимают Preferences. Затем выберите MATLAB> Editor/Debugger, и в разделе Debugging, очистите опцию Only show contextual Step in button for user-defined functions.

В качестве альтернативы можно вступить и из функций при отладке при помощи кнопок Step In или Step Out на вкладке Editor или Live Editor. Эти кнопки не соблюдают настройку Only show contextual Step in button for user-defined functions и всегда вступают и из функций MathWorks и пользовательского.

Стек вызовов функции

Когда вы продвигаетесь в вызванную функцию или файл, MATLAB отображает список функций, которые это выполнило прежде, чем сделать паузу в текущей линии. Список, также названный function call stack, показывают наверху файла и отображает функции в порядке, начиная слева с первого названного скрипта или функции, и заканчиваясь справа текущим скриптом или функцией, в которой приостановлен MATLAB.

Function call stack for plotRand showing plotRand as the first called script and mean as the current function

Для каждой функции в стеке вызовов функции существует соответствующая рабочая область. Рабочие области содержат переменные, которые вы создаете в MATLAB или импортируете из файлов данных или других программ. Переменные, которые вы присваиваете через Командное окно или создаете при помощи скриптов, принадлежат базовому рабочему пространству. Переменные, которые вы создаете в функции, принадлежат своей собственной функциональной рабочей области.

Можно исследовать значения переменных за пределами текущей рабочей области путем выбора различной рабочей области. Для получения дополнительной информации смотрите, Исследуют Значения В то время как Отладка.

Добавьте точки останова и запущенный код

Если существуют строки кода в вашем файле, который вы хотите приостановить в каждый раз, когда вы запускаете свой код, добавляете точки останова в тех линиях. Можно добавить точки останова в интерактивном режиме при помощи Редактора и Live Editor, программно при помощи функций в Командном окне или обоих.

Существует три типа точек останова: стандарт, условное выражение и ошибка. Чтобы добавить стандартную точку останова в Редакторе или Live Editor, кликните по серой области слева от исполняемой линии, где вы хотите установить точку останова. Например, кликните по области рядом с линией три в plotRand.m добавить точку останова в той линии.

plotRand script with a red breakpoint at line three

Когда вы петляете, MATLAB делает паузу в строке кода, обозначенной точкой останова. Линия, в которой приостановлен MATLAB, не запускается, пока вы не продолжаете запускать свой код.

Например, с plotRand.m файл, открытый в Редакторе, нажмите кнопку Run во вкладке Editor. MATLAB запускает plotRand.m запуск в линии один и делает паузу перед рабочей линией три.

Когда MATLAB делает паузу, несколько изменений происходят:

  • Кнопка Run во вкладке Editor или Live Editor превращается в кнопку Continue.

  • Подсказка в Командном окне превращается в K>> указание, что MATLAB находится в режиме отладки и что клавиатура сознает ситуацию.

  • MATLAB указывает на линию, в которой он приостановлен при помощи зеленой стрелы и зеленого выделения.

    plotRand script with a breakpoint at line three and a green arrow and green highlighting on line three, indicating that MATLAB is paused at line three

Совет

Это - хорошая практика, чтобы не изменять файл, в то время как MATLAB приостановлен. Изменения, которые внесены, в то время как MATLAB приостановлен, не запускаются, пока MATLAB не закончил запускать код, и код повторно выполняется.

Чтобы продолжить запускать код, нажмите кнопку Continue. MATLAB продолжает петлять, пока он не достигает конца файла или точки останова. Чтобы продолжить запускать код линию за линией, на вкладке Editor или Live Editor, нажимают Step. MATLAB выполняет текущую линию, в которой он приостановлен, и затем делает паузу в следующей строке.

Для получения дополнительной информации о различных типах точек останова и как установить, очиститесь, и отключил их, смотрите Установку точек останова.

Окончание сеанса отладки

После того, как вы идентифицируете, что проблема, чтобы закончить сеанс отладки, переходит к вкладке Editor или Live Editor и нажимает Stop. После того, как вы заканчиваете отладку, нормальный >> подсказка в Командном окне вновь появляется вместо K>> подсказка. Вы больше не можете получать доступ к стеку вызовов функции.

Чтобы избежать беспорядка, убедитесь, что закончили свой сеанс отладки каждый раз, когда вы сделаны, отладив. Если вы вносите изменения в файл и сохраняете его при отладке, MATLAB заканчивает сеанс отладки. Если MATLAB становится безразличным, когда он делает паузу, нажмите Ctrl+C, чтобы закончить отладку.

Отладьте при помощи горячих клавиш или функций

Можно выполнить большинство действий отладки при помощи горячих клавиш или при помощи функций в Командном окне. Эта таблица описывает отладку действий и связанных горячих клавиш и функций, которые можно использовать, чтобы выполнить их.

ДействиеОписаниеГорячая клавишаФункция

Продолжение

Продолжите петлять, пока конец файла не достигнут или пока с другой точкой останова не сталкиваются.

F5

dbcont

Шаг

Запустите текущую строку кода.

F10

(Shift+Command+O в macOS системах)

dbstep

Вступить

Запустите текущую строку кода, и, если линия содержит вызов другой функции, шага в эту функцию.

F11

(Shift+Command+I в macOS системах)

dbstep \in

Выйти

После вступания, остальная часть запуска вызванной функции, оставляют вызванную функцию, и затем делают паузу.

Shift+F11

(Shift+Command+U в macOS системах)

dbstep

Остановка

Окончание сеанса отладки.

Shift+F5

dbquit

Установка точки останова

Установите точку останова a текущая линия, если никакая точка останова не существует.

F12

dbstop

Ясная точка останова

Очистите точку останова в текущей линии.

F12

dbclear

Похожие темы