Контрольный код для ошибок и предупреждений

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

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

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

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

Включить непрерывный код, регистрируясь в файле кода MATLAB в Редакторе:

  1. На вкладке «Главная страница (Home)» в разделе «Конфигурация (Environment)» нажмите «Настройки (Preferences)».

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

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

Примечание

Изменение непрерывного кода, проверяющего настройки, не поддержано в MATLAB Online™. Непрерывная проверка кода всегда включается.

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

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

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

    1. На Браузере текущей папки щелкнуть.

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

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

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

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

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

Настройте анализатор кода передают индикаторы и сообщения

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

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

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

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

Примечание

Изменение настроек сообщения Анализатора кода не поддержано в MATLAB Online. Все сообщения Анализатора кода всегда включаются.

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

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

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

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

    %#ok<NOPRT> комментария появляется в конце строки, которая дает MATLAB команду не проверять на останавливающуюся точку с запятой в той строке. Подчеркивание и метка в панели индикатора для того сообщения исчезают.

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

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

    Даже если настройки Анализатора кода собираются включить это сообщение, определенный экземпляр сообщения, подавленного таким образом, не появляется, потому что %#ok более приоритетен по сравнению с установкой preference. Если вы позже решаете, что хотите проверять на останавливающуюся точку с запятой в той строке, удалить %#ok<NOPRT> из строки.

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

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

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

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

%#ok<*NOPRT> комментария появляется в конце строки, которая дает MATLAB команду не проверять на останавливающуюся точку с запятой в файле. Исчезают все подчеркивания и метки в панели индикатора сообщения, которые соответствуют этому сообщению.

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

Даже если настройки Анализатора кода собираются включить это сообщение, сообщение не появляется, потому что %#ok более приоритетен по сравнению с установкой preference. Если вы позже решаете, что хотите проверять на останавливающуюся точку с запятой в файле, удалить %#ok<*NOPRT> из строки.

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

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

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

  2. Из контекстного меню выберите Suppress 'Terminate statement with semicolon...'> In All Files.

Это изменяет установку Code Analyzer preference.

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

  1. На вкладке «Главная страница (Home)» в разделе «Конфигурация (Environment)» нажмите «Настройки (Preferences)».

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

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

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

  5. Нажмите OK.

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

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

Выполните эти шаги:

  1. На вкладке «Главная страница (Home)» в разделе «Конфигурация (Environment)» нажмите «Настройки (Preferences)».

    Диалоговое окно Preferences открывается.

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

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

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

  5. Нажмите OK.

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

Использовать сохраненные настройки:

  1. На вкладке «Главная страница (Home)» в разделе «Конфигурация (Environment)» нажмите «Настройки (Preferences)».

    Диалоговое окно Preferences открывается.

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

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

    Диалоговое окно Open появляется.

  4. Выберите из любого из своих файлов настроек.

    Настройки, которые вы выбираете, в действительности для всех файлов MATLAB, пока вы не выбираете другой набор настроек Code Analyzer.

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

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

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

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

  • Это очищено в панели настроек Анализатора кода.

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

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

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

  2. На вкладке «Главная страница (Home)» в разделе «Конфигурация (Environment)» нажмите «Настройки (Preferences)».

    Диалоговое окно Preferences открывается.

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

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

    Список сообщений теперь содержит только сообщение, которое соответствует тому ID. Если сообщение является гиперссылкой, кликните по нему, чтобы видеть объяснение и предлагаемое действие для сообщения. Это может обеспечить понимание, почему сообщение подавлено или отключено. Следующее изображение показывает, как диалоговое окно 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 задайте имя переменной явным образом в командной строке load. Например:

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

Различение структур от объектов указателя

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

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

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

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

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

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

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

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

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

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

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

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

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

Можно переключиться между показом или сокрытием сообщений развертывания Компилятора, когда вы работаете над файлом путем изменения настройки Анализатора кода этой категории сообщения. Ваш выбор, вероятно, зависит от того, работаете ли вы над файлом, который будет развернут. Когда вы изменяете настройку, она также изменяет настройки в Редакторе. Обратное также верно — когда вы изменяете сходить с Редактора, он эффективно изменяет эту настройку. Однако, если диалоговое окно будет открыто в то время, когда вы изменяете установку в Редакторе, вы не будете видеть изменений, отраженных в диалоговом окне Preferences. Изменяете ли вы сходить с Редактора или от диалогового окна Preferences, он применяется к Редактору и Отчету Анализатора кода.

Включить сообщения развертывания 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, в котором можно создать, как описано, Сохраняет настройки сообщения анализатора кода и использовать их снова, включает состояние этой установки.

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