Проверьте код на ошибки и предупреждения

MATLAB® Анализатор кода может автоматически проверить ваш код на проблемы с кодированием.

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

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

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

Чтобы включить непрерывную проверку кода в файле кода MATLAB в редакторе и Live Editor:

  1. На вкладке Home, в разделе Environment, нажмите Preferences.

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

  3. Установите значение опции Underlining Underline warnings and errors, а затем нажмите OK.

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

  7. На линии 27 наведите указатель мыши на prod.

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

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

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

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

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

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

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

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

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

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

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

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

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

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

    В линии 47 сообщение предлагает дисбаланс разделителя. Чтобы исследовать это сообщение, в редакторе или Live Editor переместите клавишу со стрелой на каждый из разделителей, чтобы увидеть, указывает ли 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. В окне Editor нажмите и выберите Show Code Analyzer Report.

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

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

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

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

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

  • Запуск отчета для всех файлов в папке:

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

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

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

      Для получения дополнительной информации см. Отчет анализатора кода MATLAB.

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

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

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

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

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

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

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

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

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

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

  2. В контекстном меню выберите Suppress 'Terminate statement with semicolon...' > On This Line.

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

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

    The %#ok синтаксис расширяется. Для примера в коде, представленном в Проверку кода для Ошибок и предупреждений, игнорирование обоих сообщений для линии 48 добавляет комментарий %#ok<NBRAK,NOPRT> в конце линии.

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

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

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

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

  2. В контекстном меню выберите Suppress 'Terminate statement with semicolon...' > In This File.

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

Если в линии нет двух сообщений, которые вы не хотите отображать где-либо в текущем файле, щелкните правой кнопкой мыши отдельно при каждом подчеркивании, а затем выберите соответствующую запись из контекстного меню. The %#ok синтаксис расширяется. Для примера в коде, представленном в Проверку кода для Ошибок и предупреждений, игнорирование обоих сообщений для линии 48 добавляет комментарий %#ok<*NBRAK,*NOPRT>.

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

Подавление всех образцов сообщения во всех файлах

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

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

  2. Выберите Suppress 'Terminate statement with semicolon...' > In All Files.

Это изменяет настройку выбора анализатора кода.

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

  1. На вкладке Home, в разделе Environment, нажмите Preferences.

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

  3. Поиск сообщений, чтобы найти таковые вы хотите подавить.

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

  5. Нажмите OK.

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

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

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

  1. На вкладке Home, в разделе Environment, нажмите Preferences.

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

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

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

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

  5. Нажмите OK.

Можно повторно использовать эти настройки для любого файла 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, если таковые имеются.

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

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

  6. Отобразите сообщения, которые по умолчанию отключены и отключены на панели Настройки, щелкнув стреле вниз справа от поля поиска. Затем нажмите Show Disabled Messages.

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

Осмыслите ограничения анализа кода

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

  • Иногда он не выдает сообщения Анализатор кода там, где вы их ожидаете.

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

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

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

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

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

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

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

Анализ кода не всегда может отличить имена функции от имен переменных. Для следующего кода, если Анализатор кода сообщение включён, анализ кода возвращает сообщение, 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 function, задайте имя переменной явно в load командная строка. Для примера:

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

Отличите структуры от Указателя Объектов

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

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

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

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

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

Для получения информации о подавлении сообщений смотрите Adjust Code Analyzer Message Indicators and Messages.

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

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

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

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

Анализируйте методы классов

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

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

Можно переключаться между отображением или скрытием сообщений развертывания компилятора при работе с файлом путем изменения выбора анализатора кода для этой категории сообщений. Ваш выбор, вероятно, зависит от того, работаете ли вы над файлом, который будет развернут. Когда вы изменяете выборы, это также изменяет настройку в редакторе. Обратное также верно - когда вы меняете настройку из редактор, это эффективно изменяет этот выбор. Однако, если диалоговое окно открыто во время изменения настройки в редакторе, изменения, отраженные в диалоговом окне Настройки, не отображаются. Изменяете ли вы настройку из Редактора или из диалогового окна Настройки (Preferences), она применяется к Редактору (Editor) и к Отчету Анализатора кода (Code Analyzer Report).

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

  1. На вкладке Home, в разделе Environment, нажмите Preferences.

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

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

  3. Щелкните стреле вниз рядом с полем поиска и выберите Show Messages in Category > MATLAB Compiler (Deployment) Messages.

  4. Нажмите кнопку Enable Category.

  5. Очистить отдельные сообщения, которые вы не хотите отображать для своего кода (при наличии).

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

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