exponenta event banner

Проверка кода на наличие ошибок и предупреждений

MATLAB ® Code Analyzer может автоматически проверять код на наличие проблем с кодированием.

Автоматическая проверка кода в редакторе и интерактивном редакторе - анализатор кода

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

Включить непрерывную проверку кода

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

  1. На вкладке Главная (Home) в разделе Среда (Environment) щелкните Настройки (Preferences).

  2. Выберите MATLAB > Code Analyzer, а затем установите флажок Включить интегрированные предупреждения и сообщения об ошибках.

  3. Задайте для параметра «Подчеркивание» значение Underline warnings and errorsи нажмите кнопку «ОК».

Использовать непрерывную проверку кода

Можно использовать непрерывную проверку кода в файлах кода MATLAB в редакторе и интерактивном редакторе:

  1. Откройте файл кода MATLAB в редакторе или интерактивном редакторе. В этом примере используется образец файла lengthofline.m поставляется с программным обеспечением MATLAB:

    1. Откройте файл примера:

      open(fullfile(matlabroot,'help','techdoc','matlab_env',...
           'examples','lengthofline.m'))
      
    2. Сохраните файл примера в папке, к которой имеется доступ для записи. Для примера: lengthofline.m сохраняется в C:\my_MATLAB_files.

  2. Проверьте индикатор сообщения в верхней части строки сообщений, чтобы увидеть сообщения анализатора кода для файла:

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

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

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

    В этом примере индикатор имеет красный цвет, что означает наличие по крайней мере одной ошибки в файле.

  3. Щелкните по индикатору сообщения для перехода к следующему фрагменту кода, содержащему сообщение. Следующий фрагмент кода отображается в строке состояния относительно текущей позиции курсора.

    В lengthofline например, первое сообщение находится в строке 21. Курсор перемещается в начало строки 21.

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

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

    Сообщение открывается в подсказке и содержит кнопку Подробно (Details), которая предоставляет доступ к дополнительной информации путем расширения сообщения. Не все сообщения содержат дополнительную информацию.

  5. Нажмите кнопку Подробно.

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

  6. При необходимости измените код.

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

  7. На линии 27 наведите курсор prod.

    Код подчеркнут, так как имеется предупреждающее сообщение, и выделен, так как доступно автоматическое исправление. При просмотре сообщения появляется кнопка для применения автоматического исправления.

  8. Устраните проблему, выполнив одно из следующих действий.

    • Если вы знаете, что такое исправление (из предыдущего опыта), нажмите кнопку Исправить.

    • Если вы не знакомы с исправлением, просмотрите и примените его следующим образом:

      1. Щелкните выделенный код правой кнопкой мыши (для одной кнопки мыши нажмите Ctrl + щелчок), а затем просмотрите первый элемент в контекстном меню .

      2. Щелкните исправление.

        MATLAB автоматически корректирует код.

        В этом примере MATLAB заменяет prod(size(hline)) с numel(hline).

  9. Перейдите к другому сообщению, выполнив одно из следующих действий:

    • Чтобы перейти к следующему сообщению, щелкните индикатор сообщения или следующий подчеркнутый фрагмент кода.

    • Чтобы перейти к линии, которую представляет маркер, щелкните красную или оранжевую линию на панели индикаторов.

      Чтобы увидеть первую ошибку в lengthoflineщелкните на первом красном маркере в строке сообщений. Курсор перемещается к первому фрагменту подозрительного кода в строке 47. Кнопки Подробно (Details) и Исправить (Fix) затемнены (или не видны, если в MATLAB Online™), что указывает на отсутствие дополнительной информации об этом сообщении и автоматического исправления.

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

  10. Измените код, чтобы устранить проблему, отмеченную в сообщении - индикаторы сообщения обновляются автоматически.

    На линии 47 сообщение предполагает дисбаланс разделителя. Чтобы исследовать это сообщение, в редакторе или интерактивном редакторе наведите клавишу со стрелкой на каждый из разделителей, чтобы увидеть, указывает ли MATLAB на несоответствие. Инструкции по включению сопоставления разделителей на стрелке см. в разделе Установка настроек клавиатуры.

    Возможно, нет несоответствующих разделителей. Однако анализ кода обнаруживает точку с запятой в скобках: data{3}(;)и интерпретирует его как конец заявления. Сообщение сообщает, что два оператора в строке 47 имеют дисбаланс разделителя.

    Чтобы устранить проблему, в строке 47 измените data{3}(;) кому data{3}(:). Теперь подчеркивание больше не появляется в строке 47. Одно изменение решает проблемы в обоих сообщениях для строки 47. Поскольку изменение удалило единственную ошибку в файле, индикатор сообщения в верхней части строки изменяется с красного на оранжевый, указывая, что остаются только предупреждения и потенциальные улучшения.

После изменения кода для адресации всех сообщений или отключения назначенных сообщений индикатор сообщения становится зеленым. Файл примера со всеми адресованными сообщениями был сохранен как lengthofline2.m. Откройте исправленный файл примера с помощью команды:

open(fullfile(matlabroot,'help','techdoc',...
     'matlab_env', 'examples','lengthofline2.m'))

Создание отчета по сообщениям анализатора кода

Можно создать отчет о сообщениях для отдельного файла или для всех файлов в папке одним из следующих способов:

  • Выполните отчет для отдельного файла кода MATLAB:

    1. В окне Редактор щелкните и выберите Показать отчет анализатора кода.

      Отчет анализатора кода появляется в веб-браузере MATLAB.

    2. Измените файл на основе сообщений в отчете.

    3. Сохраните файл.

    4. Повторно запустите отчет, чтобы узнать, устранены ли вашими изменениями проблемы, отмеченные в сообщениях.

    Создание отчета для отдельного файла в интерактивном редакторе не поддерживается.

  • Выполните отчет для всех файлов в папке:

    1. В браузере текущей папки нажмите.

    2. Выберите «Отчеты» > «Отчет анализатора кода».

    3. Измените файлы на основе сообщений в отчете.

      Дополнительные сведения см. в разделе Отчет анализатора кода MATLAB.

    4. Сохраните измененные файлы.

    5. Повторно запустите отчет, чтобы узнать, устранены ли вашими изменениями проблемы, отмеченные в сообщениях.

Настройка индикаторов и сообщений анализатора кода

В зависимости от стадии заполнения файла MATLAB может потребоваться ограничить подчеркивание кода. Это можно сделать с помощью настройки Анализатор кода (Code Analyzer), описанной на шаге 1 в разделе Проверка кода на наличие ошибок и предупреждений. Например, при первом кодировании можно подчеркнуть только ошибки, так как предупреждения отвлекают внимание.

Анализ кода не предоставляет полной информации о каждой ситуации, и иногда может не потребоваться изменять код на основе сообщения. Если вы не хотите изменять код и не хотите видеть индикатор и сообщение для этой строки, подавьте их. Для lengthofline например, в строке 48 первое сообщение Terminate statement with semicolon to suppress output (in functions). Добавление точки с запятой в конец инструкции подавляет вывод и является обычной практикой. Анализ кода предупреждает о строках, которые выдают выходные данные, но не имеют конечной точки с запятой. Если вы хотите просмотреть выходные данные из строки 48, не добавляйте точку с запятой, как это предлагается в сообщении.

Существует несколько различных способов подавления (отключения) индикаторов предупреждений и сообщений об ошибках:

Нельзя подавлять сообщения об ошибках, например синтаксические ошибки. Поэтому инструкции по подавлению сообщений не применяются к этим типам сообщений.

Подавление экземпляра сообщения в текущем файле

Можно подавить определенный экземпляр сообщения анализатора кода в текущем файле. Например, используя код, представленный в окне Проверка кода на наличие ошибок и предупреждений, выполните следующие действия:

  1. В строке 48 щелкните правой кнопкой мыши при первом подчеркивании (для одной кнопки мыши нажмите Ctrl + щелчок).

  2. В контекстном меню выберите Подавить оператор завершения с точкой с запятой... > В этой строке.

    Комментарий %#ok<NOPRT> появляется в конце строки, которая дает команду MATLAB подавить Terminate statement with semicolon to suppress output (in functions) Сообщение анализатора кода для этой строки. Подчеркивание и отметка в строке индикатора этого сообщения исчезают.

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

    %#ok синтаксис расширяется. Например, в коде, представленном в поле Check Code for Errors and Warnings, игнорирование обоих сообщений для строки 48 добавляет комментарий. %#ok<NBRAK,NOPRT> в конце строки.

    Даже если настройки анализатора кода настроены на включение этого сообщения, конкретный экземпляр сообщения, подавленный таким образом, не отображается, поскольку %#ok имеет приоритет над настройкой. Если позже вы решите, что хотите показать Terminate statement with semicolon to suppress output (in functions) Сообщение анализатора кода для этой строки, удалить %#ok<NOPRT> от строки.

Подавление всех экземпляров сообщения в текущем файле

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

  1. В строке 48 щелкните правой кнопкой мыши при первом подчеркивании (для одной кнопки мыши нажмите Ctrl + щелчок).

  2. В контекстном меню выберите Подавить оператор завершения с точкой с запятой... > В этом файле .

Комментарий %#ok<*NOPRT> появляется в конце строки, которая предписывает MATLAB подавлять все экземпляры Terminate statement with semicolon to suppress output (in functions) Сообщение анализатора кода в текущем файле. Все подчеркивания и метки в строке индикатора сообщения, соответствующие этому сообщению, исчезают.

Если в строке есть два сообщения, которые не нужно отображать в текущем файле, щелкните правой кнопкой мыши отдельно при каждом подчеркивании, а затем выберите соответствующую запись в контекстном меню. %#ok синтаксис расширяется. Например, в коде, представленном в поле Check Code for Errors and Warnings, игнорирование обоих сообщений для строки 48 добавляет комментарий. %#ok<*NBRAK,*NOPRT>.

Даже если настройки анализатора кода настроены на включение этого сообщения, сообщение не отображается, поскольку %#ok имеет приоритет над настройкой. Если позже вы решите, что хотите показать все экземпляры Terminate statement with semicolon to suppress output (in functions) Сообщение анализатора кода в текущем файле, удалить %#ok<*NOPRT> от строки.

Подавление всех экземпляров сообщения во всех файлах

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

  1. В строке 48 щелкните правой кнопкой мыши при первом подчеркивании (для одной кнопки мыши нажмите Ctrl + щелчок ).

  2. Выберите Подавить оператор Terminate с точкой с запятой... > Во всех файлах.

При этом изменяется настройка анализатора кода.

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

  1. На вкладке Главная (Home) в разделе Среда (Environment) щелкните Настройки (Preferences).

  2. Выберите MATLAB > Code Analyzer.

  3. Найдите сообщения, которые требуется подавить.

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

  5. Нажмите кнопку ОК.

Сохранить и повторно использовать параметры сообщений анализатора кода

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

Выполните следующие действия.

  1. На вкладке Главная (Home) в разделе Среда (Environment) щелкните Настройки (Preferences).

    Откроется диалоговое окно Настройки (Preferences).

  2. Выберите MATLAB > Code Analyzer.

  3. Включение или отключение определенных сообщений или категорий сообщений.

  4. Нажмите кнопку Действия, выберите Сохранить как, а затем сохраните настройки в txt файл.

  5. Нажмите кнопку ОК.

Эти настройки можно повторно использовать для любого файла MATLAB или предоставить файл настроек другому пользователю.

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

  1. На вкладке Главная (Home) в разделе Среда (Environment) щелкните Настройки (Preferences).

    Откроется диалоговое окно Настройки (Preferences).

  2. Выберите MATLAB > Code Analyzer.

  3. Используйте выпадающий список Active Settings, чтобы выбрать Browse....

    Откроется диалоговое окно Открыть (Open).

  4. Выберите один из файлов параметров.

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

Понимание кода, содержащего подавленные сообщения

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

  • Один или несколько %#ok<message-ID> директивы находятся в строке кода, которая вызывает сообщение, указанное <message-ID>.

  • Один или несколько %#ok<*message-ID> директивы находятся в файле, который вызывает сообщение, указанное <message-ID>.

  • Он очищается на панели настроек анализатора кода.

  • По умолчанию он отключен.

Чтобы определить причины подавления некоторых сообщений:

  1. Поиск в файле для %#ok и создайте список всех идентификаторов сообщений, связанных с этой директивой.

  2. На вкладке Главная (Home) в разделе Среда (Environment) щелкните Настройки (Preferences).

    Откроется диалоговое окно Настройки (Preferences).

  3. Выберите MATLAB > Code Analyzer.

  4. В поле поиска введите msgid: после которого следует один из идентификаторов сообщений, если таковые имеются, найденных на шаге 1.

    Теперь список сообщений содержит только сообщение, соответствующее этому идентификатору. Если сообщение является гиперссылкой, щелкните его, чтобы просмотреть объяснение и предложенное действие для сообщения. Это позволяет понять, почему сообщение подавлено или отключено. На следующем рисунке показано отображение диалогового окна «Установки» при вводе msgid:CPROP в поле поиска.

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

  6. Отобразите сообщения, которые отключены по умолчанию и отключены на панели Настройки (Preferences), щелкнув стрелку вниз справа от поля поиска. Затем щелкните Показать отключенные сообщения.

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

Понимание ограничений анализа кода

Анализ кода является ценным инструментом, но существуют некоторые ограничения:

  • Иногда не удается создать сообщения анализатора кода там, где они ожидаются.

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

  • Иногда он выдает сообщения, которые не относятся к вашей ситуации.

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

    Подавьте предупреждающее сообщение, если вы уверены, что сообщение не относится к вашей ситуации. Если ваша причина подавления сообщения тонкая или неясная, включите комментарий с обоснованием. Таким образом, те, кто читает ваш код, знают о ситуации.

    Дополнительные сведения см. в разделе Настройка индикаторов и сообщений анализатора кода.

В этих разделах описываются ограничения анализа кода в отношении следующего:

Отличить имена функций от имен переменных

Анализ кода не всегда может отличить имена функций от имен переменных. Для следующего кода, если сообщение анализатора кода включено, анализ кода возвращает сообщение, Code Analyzer cannot determine whether xyz is a variable or a function, and assumes it is a function. Анализ кода не может выполнить определение, поскольку xyz ему не присвоено явное значение. Однако программа, возможно, поместила значение в рабочую область таким образом, что анализ кода не может обнаружить.

function y=foo(x)
   .
   .
   .
   y = xyz(x);
end

Например, в следующем коде: xyz может быть функцией или переменной, загруженной из MAT-файла. Анализ кода не имеет способа определения.

function y=foo(x)
    load abc.mat
    y = xyz(x);
end
Переменные также могут быть необнаружены анализом кода при использовании eval, evalc, evalin, или assignin функции.

Если анализ кода ошибается переменной для функции, выполните одно из следующих действий.

  • Инициализируйте переменную, чтобы анализ кода не рассматривал ее как функцию.

  • Для load , укажите имя переменной явным образом в load командной строки. Например:

     function y=foo(x)
         load abc.mat xyz
         y = xyz(x);
     end

Отличить структуры от объектов-дескрипторов

Анализ кода не всегда может отличить структуры от объектов-дескрипторов. В следующем коде, если x является структурой, можно ожидать сообщения анализатора кода, указывающего, что код никогда не использует обновленное значение структуры. Если x является объектом дескриптора, однако этот код может быть правильным.

function foo(x)
		x.a = 3;
end

Анализ кода не может определить, x является структурой или объектом-дескриптором. Чтобы свести к минимуму количество неверных сообщений, анализ кода не возвращает ни одного сообщения для предыдущего кода, даже если оно может содержать тонкую и серьезную ошибку.

Отличить встроенные функции от перегруженных

Если некоторые встроенные функции перегружены в классе или на пути, сообщения анализатора кода могут применяться к встроенной функции, но не к вызываемой вами перегруженной функции. В этом случае подавьте сообщение в строке, где оно отображается, или подавьте его для всего файла.

Сведения о подавлении сообщений см. в разделе Настройка индикаторов и сообщений анализатора кода.

Определение размера или формы переменных

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

Анализ определений классов с помощью суперклассов

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

Анализ методов классов

Большинство методов класса должно содержать по крайней мере один аргумент, являющийся объектом того же класса, что и метод. Но это не всегда должно быть первым аргументом. Когда это так, анализ кода может определить, что аргумент является объектом определяемого класса, и может выполнять различные проверки. Например, можно проверить, что имена свойств и методов существуют и написаны правильно. Однако если анализ кода не может определить, что объект является аргументом определяемого класса, он не может предоставить эти проверки.

Включить сообщения развертывания компилятора MATLAB

При работе с файлом можно переключаться между отображением или скрытием сообщений о развертывании компилятора, изменив настройки анализатора кода для этой категории сообщений. Скорее всего, выбор зависит от того, работаете ли вы над развертываемым файлом. При изменении настройки она также изменяет настройку в редакторе. Обратное также верно - при изменении настройки из редактора эта настройка фактически изменяется. Однако если диалоговое окно открыто во время изменения настройки в редакторе, изменения, отраженные в диалоговом окне «Установки», не отображаются. Независимо от того, изменяется ли параметр в редакторе или в диалоговом окне «Установки», он применяется к редактору и к отчету анализатора кода.

Для включения сообщений развертывания Compiler™ MATLAB:

  1. На вкладке Главная (Home) в разделе Среда (Environment) щелкните Настройки (Preferences).

    Откроется диалоговое окно Настройки (Preferences).

  2. Выберите MATLAB > Code Analyzer.

  3. Щелкните стрелку вниз рядом с полем поиска и выберите Показать сообщения в категории > Сообщения компилятора (развертывания) MATLAB.

  4. Нажмите кнопку «Включить категорию».

  5. Удалите отдельные сообщения, которые не требуется отображать для кода (если таковые имеются).

  6. Решите, следует ли сохранить эти параметры, чтобы их можно было повторно использовать при следующей работе над файлом, подлежащим развертыванию.

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