MATLAB.Exponenta
–Û·Ë͇ Matlab&Toolboxes

MATLAB

В.Г.Потемкин "Введение в Matlab" (v 5.3)
Глава  4. Отладка и профилирование M-файлов

  В оглавление книги \ К следующему разделу \ К предыдущему разделу \ Предметный указатель

4.1. Режим графического интерфейса

Рассмотрим процесс отладки с использованием отладчика M-File Editor/Debugger.

Для его запуска используется команда edit со следующим синтаксисом:

         edit
         edit <имя_М-файла>
         edit <имя_файла.***>

Команда edit запускает отладчик M-File Editor/Debugger.

Команда edit <имя_М-файла>  запускает отладчик M-File Editor/Debugger и открывает М-файл с указанным именем.

Команда edit <имя_файла.***>  запускает отладчик M-File Editor/Debugger и открывает файл с расширением ***.

Экран отладчика приведен на рис. 4.1

pic401.gif (6146 bytes)

Рис. 4.1

Иконки отладки на инструментальной панели имеют следующее назначение:

Иконка отладки Описание Команда
Continue Продолжить выполнение М-файла до его завершения или до первой контрольной точки. dbcont
Set/Clear Breakpoint Установить/удалить контрольную точку в той строке, на которой находится курсор dbstop/ dbclear
Single Step Исполнить текущую строку. dbstep
Step In Исполнить текущую строку, а если она включает вызов М-функции, выполнить в ней останов. dbstep in
Quit Debugging Выйти из режима отладки. dbquit

Щелчок правой кнопкой мыши в окне Отладчика приводит к появлению следующего всплывающего меню (рис. 4.2), в котором задействованы некоторые из опций отладчика

pic402.gif (2854 bytes)

Рис. 4.2

Установка контрольных точек. Большинство сеансов отладки начинается с установки контрольных точек. Контрольные точки позволяют приостановить выполнение М-файла в указанных строках и просмотреть или изменить значения переменных. Красный знак рядом со строкой указывает, что установлена в контрольная точка этой строке. Если строка, выбранная для контрольной точки, является невыполнимой строкой, то контрольная точка устанавливается в первой выполнимой строке.

Замечание

Меню Debug содержит опции, которые позволяют приостановить выполнение М-файла в следующих ситуациях:

Ситуация Опция
При возникновении ошибки Stop if Error
При появлении предупреждения Stop if Warning
При появлении результата типа NaN или Inf Stop if NaN or Inf

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

Откроем модуль variance.m и установим контрольную точку в строке 4:
              y = tot/(length(x)-1);

Номер строки обозначен в правой нижней части строки состояния (рис. 4.1). Установите контрольную точку, позиционируя курсор в строке текста, и нажмите на иконку Set/Clear Breakpoint инструментальной панели. Другой способ - выбрать опцию Set/Clear Breakpoint из меню Debug, либо выбрать эту же опцию из контекстного меню, вызываемого щелчком правой кнопки мыши.

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

Проверка переменных. Чтобы задействовать контрольную точку и проверить значения переменных, следует в командном окне вызвать функцию variance(v). Когда выполнение М-файла будет приостановлено в контрольной точке, слева от текста появится желтая стрелка, которая указывает на строку, которая должна выполняться следующей. Желтая стрелка, направленная вниз, указывает на паузу по завершении выполнения сценария или функции. Это позволяет проверить переменные перед возвратом в вызывающую функцию.

Проверим значения переменных mu и tot из среды отладчика. Для этого выделим имя каждой переменной и вызвав контекстное меню щелчком правой кнопки мыши, выберем опцию Evaluate Selection. Другой способ - выбрать опцию Evaluate Selection из меню View.

В обоих случаях в командном окне высветится следующий результат:
        K» mu
        mu = 3
       K» tot
        tot = 4

Отсюда следует, что в М-функции sqsum есть ошибка .

Просмотр рабочих областей. Для просмотра содержимого рабочих областей следует использовать ниспадающее меню Stack в правом верхнем углу окна Отладчика. Оно позволяет в данном случае просматривать как содержимое рабочей области М-функции variance.m, так и рабочей области системы MATLAB (Base Workspace).

Применение команды whos в среде М-функции variance.m дает следующий результат

     K» whos

Name Size Bytes Class
mu 1x1 8 double array
tot 1x1 8 double array
  x 1x5 40 double array

           Grand total is 7 elements using 56 bytes

Применение команды whos в среде Base Workspace - рабочей области системы дает следующий результат

        whos

Name Size Bytes Class
ans 1x1 8 double array
myvar1 1x1 8 double array
v 1x5 40 double array
var1 1x1 8 double array

          Grand total is 8 elements using 64 bytes

В этом списке присутствуют переменные v, var1, myvar1 и, возможно, другие, созданные пользователем в процессе работы.

Процесс отладки.Удалим контрольную точку в строке 4 модуля variance.m, поместив курсор на эту строку и выбрав соответствующую иконку инструментальной пвнели, либо опцию Clear Breakpoint из меню Debug. Другой способ - щелчком правой кнопки мыши вызвать контекстное меню и выбрать опцию Clear Breakpoint.

Продолжим выполнение, выбрав опцию Continue из меню Debug. Установим контрольную точку в строке 4 подпрограммы sqsum.m и проверим изменение индекса и результаты вычислений внутри цикла. При запуске модуля variance.m останов произойдет в строке 4 модуля sqsum:

               tot = tot + (x(i) - mu).^2;

Вычислим переменную цикла i:

            K» i
             i = 1

Чтобы выполнить следующую строку, выберем опцию Single Step из меню Debug или соответствующую иконку инструментальной шкалы. После останова вычислим переменную tot:

             K »tot
              tot = 4

Снова выполним команду Single Step и убедимся, что модуль sqsum выполняет цикл for i = 1:length(mu) только один раз.

Таким образом, цикл выполняется только до верхнего предела, равного длине скаляра mu, а не длине входного вектора x.

Выберем опцию Quit Debugging из меню Debug или соответствующую иконку инструментальной шкалы и завершим выполнение М-файла.

Исправим заголовок цикла:

Было Стало
for i = 1:length(mu) for i = 1:length(x)

Чтобы убедиться, что внесенное изменение приводит к правильному результату, переустановим контрольную точку в строку 4 модуля variance.m и снова запустим его на выполнение.

Выполнение приостанавливается после возврата управления из модуля sqsum в модуль variance, но перед той строкой, где используется это значение. Выведем значение tot после внесенных изменений:

               K» tot
               tot = 10

Выберем опцию Continue из меню Debug и убедимся, что полученный результат верен.

Завершение процесса отладки. Выбрать опцию Exit Editor/Debugger из меню File или соответствующую иконку инструментальной шкалы и завершить процесс отладки.

  В оглавление книги \ К следующему разделу \ К предыдущему разделу \ Предметный указатель

 


Поиск по сайту:

Система Orphus

Яндекс.Метрика