Проверка кода для ошибок и предупреждений Используя анализатор кода

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

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

Чтобы включить непрерывную проверку кода, на вкладке Home, в разделе Environment, нажимают Preferences. Выберите MATLAB> Code Analyzer, и затем установите интегрированный флажок предупреждающих сообщений и сообщений об ошибке Enable. Установите опцию Underlining на Underline warnings and errors.

Когда непрерывная проверка кода включена, MATLAB отображает предупреждающие сообщения и сообщения об ошибке о вашем коде в Редакторе и Live Editor. Например, файл примера lengthofline.m содержит несколько ошибок и предупреждений. Скопируйте файл в свою текущую папку и затем откройте его в Редакторе.

copyfile(fullfile(matlabroot,'help','techdoc','matlab_env','examples','lengthofline.m'))
fileattrib('lengthofline.m','+w');
edit('lengthofline.m')

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

Когда вы открываете файл в Редакторе или Live Editor, индикатор сообщения наверху панели индикатора показывает полное состояние Code Analyzer для файла.

Передайте индикаторОписание
Red error symbol

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

Yellow warning symbol

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

Green check mark symbol

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

Например, в lengthofline.m, индикатор сообщенияRed error symbol, означая, что файл содержит по крайней мере одну ошибку.

lengthofline file in the Editor with the red error symbol displayed in the indicator bar

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

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

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

lengthofline file in the Editor after clicking the message indicator. Three errors display next to the error marker in the indicator bar.

Чтобы перейти к следующему фрагменту кода, содержащему сообщение, кликните по индикатору сообщения. Также можно кликнуть по маркеру в панели индикатора, чтобы перейти к линии, которую представляет маркер. Например, кликните по первому маркеру в панели индикатора в lengthofline.m. Курсор перемещается в начало линии 21.

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

lengthofline file in the Editor showing a warning message with a details button

Решите проблемы в коде

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

Например, на линии 47 в lengthofline.m, сообщение предлагает неустойчивость разделителя. Когда вы перемещаете клавиши со стрелками через каждый разделитель, MATLAB, кажется, не указывает на несоответствие. Однако анализ кода обнаруживает точку с запятой в data{3}(;) и интерпретирует его как конец оператора.

lengthofline file in the Editor after clicking the message indicator. Three errors display next to the error marker in the indicator bar.

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

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

lengthofline file in the Editor showing a warning message with a fix button

Например, на линии 27 в lengthofline.m, поместите мышь по подчеркнутому и подсвеченному фрагменту кода prod. Переданный отображенный включает кнопку Fix.

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

lengthofline file in the Editor showing the context menu. The first item in the menu is the suggested fix.

Если несколько экземпляров проблемы существуют, MATLAB может предложить применять предложенное исправление для всех экземпляров проблемы. Чтобы применить фиксацию для всех экземпляров проблемы, щелкните правой кнопкой по подсвеченному коду и выберите Fix All (n) Экземпляры Этой Проблемы. Эта опция не доступна для всех предложенных исправлений.

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

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

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

Можно создать отчет сообщений Анализатора кода для всех файлов в папке.

Создать отчет для всех файлов в папке:

  1. В Браузере текущей папки нажмитеShow Current Folder Actions arrow кнопку.

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

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

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

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

Чтобы создать отчет для отдельного файла кода MATLAB, используйте mlintrpt функция. Например, чтобы создать отчет для файла примера lengthofline.m, введите mlintrpt('lengthofline.m') в Командном окне.

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

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

Можно задать, какой тип кодирования проблем подчеркнуты, чтобы лучше всего удовлетворить текущей стадии разработки. Например, при первом кодировании, вы можете предпочесть подчеркивать только ошибки, потому что предупреждения могут быть недовольными. Чтобы изменить настройки подчеркивания, на вкладке Home, в разделе Environment, нажимают Preferences. Выберите MATLAB> Code Analyzer, и затем выберите опцию Underlining.

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

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

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

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

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

Вы не можете подавить сообщения об ошибке, такие как синтаксические ошибки.

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

Можно подавить определенный экземпляр сообщения Анализатора кода в текущем файле. Например, чтобы подавить сообщение на линии 48 в файле примера lengthofline.m, щелкните правой кнопкой по первому подчеркиванию по линии 48 и выберите Suppress 'Terminate statement with semicolon...'> On This Line.

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

Если линия содержит два, передают это, вы не хотите отображать, щелкать правой кнопкой по каждому подчеркиванию отдельно и выбирать соответствующую запись из контекстного меню. %#ok синтаксис расширяется. Например, подавляя оба сообщения для линии 48 в файле примера lengthofline.m добавляет комментарий %#ok<NBRAK,NOPRT> в конце линии.

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

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

Можно подавить все экземпляры определенного сообщения Анализатора кода в текущем файле. Например, чтобы подавить все экземпляры сообщения на линии 48 в файле примера lengthofline.m, щелкните правой кнопкой по первому подчеркиванию по линии 48 и выберите Suppress 'Terminate statement with semicolon...'> In This File.

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

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

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

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

Можно отключить все экземпляры сообщения Анализатора кода во всех файлах. Например, чтобы подавить все экземпляры во всех файлах сообщения на линии 48 в файле примера lengthofline.m, щелкните правой кнопкой по первому подчеркиванию по линии 48 и выберите Suppress 'Terminate statement with semicolon...'> In All Files. Эта опция изменяет настройки Анализатора кода.

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

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

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

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

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

  5. Нажмите OK.

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

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

Сохранять настройки к файлу:

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

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

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

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

  5. Нажмите OK.

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

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

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

  3. Откройте список Active settings и выберите Browse.

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

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

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

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

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

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

  • Сообщения очищены в панели настроек Анализатора кода.

  • Сообщения отключены по умолчанию.

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

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

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

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

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

    search field containing a search string and the resulting search results

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

  4. Нажмите кнопку Enable Category справа от заголовка категории MATLAB Compiler (Deployment) Messages.

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

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

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

Смотрите также

|

Похожие темы