Поделиться через


Краткое руководство. Анализ кода для C/C++

Качество приложения можно улучшить путем регулярного выполнения анализа кода C или C++. Анализ кода поможет найти распространенные проблемы и нарушения надлежащей практики программирования. И, он находит дефекты, которые трудно обнаружить путем тестирования. Его предупреждения отличаются от ошибок компилятора и предупреждений: он ищет определенные шаблоны кода, которые, как известно, вызывают проблемы. То есть код, который является допустимым, но по-прежнему может создавать проблемы для вас или для других пользователей, использующих код.

Настройка наборов правил для проекта

  1. В Обозреватель решений откройте контекстное меню для имени проекта и выберите пункт "Свойства".

  2. При необходимости в списках конфигурации и платформы выберите конфигурацию сборки и целевую платформу.

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

  4. Выберите набор правил, который вы хотите использовать или создать настраиваемый набор правил. Если используется LLVM/clang-cl, см. раздел "Использование Clang-Tidy" в Visual Studio для настройки параметров анализа Clang-Tidy.

Стандартные наборы правил C/C++

Visual Studio включает следующие стандартные наборы правил для машинного кода:

Набор правил Описание
Арифметические правила проверки ядра C++ Эти правила применяют проверки, связанные с арифметическими операциями из основных рекомендаций C++.
Правила основных проверок границ в C++ Эти правила применяют профиль Bounds рекомендаций C++ Core Guidelines.
Правила класса проверки ядра C++ Эти правила применяют проверки, связанные с классами из основных рекомендаций C++.
Правила параллелизма C++ Core Check Эти правила применяют проверки, связанные с параллелизмом из основных рекомендаций C++.
Правила const проверки ядра C++ Эти правила применяют проверки , связанные с константами, из основных рекомендаций C++.
Правила объявления основной проверки C++ Эти правила применяют проверки, связанные с объявлениями из основных рекомендаций C++.
Правила основного контроля перечислений C++ Эти правила обеспечивают проверки, связанные с перечислениями, из Основополагающих рекомендаций C++.
Экспериментальные правила проверки ядра C++ Эти правила собирают некоторые экспериментальные проверки. В конечном итоге мы ожидаем, что эти проверки будут перемещены в другие наборы правил или полностью удалены.
Правила функции проверки ядра C++ Эти правила применяют проверки, связанные с функциями из основных рекомендаций C++.
Правила GSL для проверки ядра C++ Эти правила применяют проверки, связанные с библиотекой поддержки рекомендаций из основных рекомендаций C++.
Правила времени существования проверки ядра C++ Эти правила применяют профиль времени существования основных рекомендаций C++ .
Правила управляющих указателей C++ Core Эти правила применяют проверки управления ресурсами, связанные с owner<T> основными рекомендациями по C++ .
Правила проверки сырых указателей в C++ Core Эти правила применяют проверки управления ресурсами, связанные с необработанными указателями из основных рекомендаций C++.
Правила проверки ядра C++ Эти правила применяют подмножество проверок из основных рекомендаций C++ . Используйте этот набор правил, чтобы включить все правила проверки ядра C++ за исключением наборов правил перечисления и экспериментальных правил.
Правила общего указателя на C++ Core Эти правила применяют проверки управления ресурсами, связанные с типами с семантикой общего указателя из Основных рекомендаций по C++.
Правила STL для проверки ядра C++ Эти правила применяют проверки, касающиеся стандартной библиотеки C++ из C++ Core Guidelines.
Правила стиля проверки ядра C++ Эти правила применяют проверки, связанные с использованием выражений и инструкций из основных рекомендаций C++ .
Правила типа проверки ядра C++ Эти правила обеспечивают соблюдение Типового профиля руководящих принципов C++ Core Guidelines.
Правила проверки ядра C++ для уникальных указателей Эти правила применяют проверки управления ресурсами, связанные с типами с уникальной семантикой указателя из основных рекомендаций C++.
Правила проверки параллелизма Эти правила применяют набор проверок шаблонов параллелизма Win32 в C++.
Правила согласованности Добавляет правила параллелизма из основных рекомендаций C++ в правила проверки параллелизма.
Минимальные правила Майкрософт Эти правила сосредоточены на наиболее важных проблемах в машинном коде, включая потенциальные дыры безопасности и сбои приложений. Мы рекомендуем включить этот набор правил в любой настраиваемый набор правил, создаваемый для собственных проектов.
Рекомендуемые правила Microsoft Native Эти правила сосредоточены на наиболее важных и распространенных проблемах в машинном коде. К этим проблемам относятся потенциальные дыры безопасности и сбои приложений. Мы рекомендуем включить этот набор правил в любой настраиваемый набор правил, создаваемый для собственных проектов. Этот набор правил предназначен для использования с версией Visual Studio Professional и выше. Включено все правила из Microsoft Native Minimum Rules.

Visual Studio включает следующие стандартные наборы правил для управляемого кода:

Набор правил Описание
Правила правильности Microsoft Basic Эти правила сосредоточены на ошибках логики и распространенных ошибках, сделанных в использовании API платформы. Включите этот набор правил, чтобы развернуть список предупреждений, сообщаемых минимальными рекомендуемыми правилами.
Правила руководства по проектированию Microsoft Basic Эти правила сосредоточены на применении лучших практик для упрощения понимания и использования кода. Включите этот набор правил, если проект содержит код библиотеки или если вы хотите применить рекомендации по легко поддерживаемому коду.
Правила расширенной правильности Майкрософт Эти правила расширяют базовые правила правильности, чтобы максимально выявить и сообщить о логических ошибках и ошибках использования фреймворка. Дополнительное внимание уделяется конкретным сценариям, таким как взаимодействие COM и мобильные приложения. Рекомендуется включить этот набор правил, если один из этих сценариев применяется к проекту или найти дополнительные проблемы в проекте.
Правила расширенного проектирования Майкрософт Эти правила расширяют основные правила руководства по проектированию, чтобы максимально повысить удобство использования и удобство обслуживания. Дополнительное внимание уделяется рекомендациям по именованию. Рекомендуется включить этот набор правил, если проект включает код библиотеки или если вы хотите применить самые высокие стандарты для написания поддерживаемого кода.
Правила глобализации Майкрософт Эти правила сосредоточены на проблемах, мешающих правильному отображению данных в вашем приложении при использовании в разных языках, локалях и культурах. Включите этот набор правил, если приложение локализовано и /или глобально.
Минимальные правила, управляемые Корпорацией Майкрософт Эти правила сосредоточены на наиболее важных проблемах в коде, для которых анализ кода является наиболее точным. Эти правила немногочисленные и предназначены только для использования в ограниченных изданиях Visual Studio. Используйте набор правил MinimumRecommendedRules.ruleset с другими версиями Visual Studio.
Рекомендуемые правила управления от Майкрософт Эти правила сосредоточены на наиболее важных проблемах в коде. К этим проблемам относятся потенциальные дыры безопасности, сбои приложений и другие важные ошибки логики и проектирования. Мы рекомендуем включить этот набор правил в любой настраиваемый набор правил, создаваемый для проектов.
Минимальные правила Microsoft Mixed (C++ /CLR) Эти правила сосредоточены на наиболее важных проблемах в проектах C++, поддерживающих среду CLR. К этим проблемам относятся потенциальные дыры безопасности, сбои приложений и другие важные ошибки логики и проектирования. Мы рекомендуем включить этот набор правил в любой настраиваемый набор правил, создаваемый для проектов C++, поддерживающих среду CLR.
Рекомендуемые правила Microsoft Mixed (C++ /CLR) Эти правила сосредоточены на наиболее распространенных и критически важных проблемах в проектах C++, поддерживающих среду CLR. К этим проблемам относятся потенциальные дыры безопасности, сбои приложений и другие важные ошибки логики и проектирования. Этот набор правил предназначен для использования в выпуске Visual Studio Professional и более поздних версий.
Правила безопасности Майкрософт Этот набор правил содержит все правила безопасности Майкрософт. Включите этот набор правил, чтобы максимально увеличить количество потенциальных проблем безопасности, сообщаемых.

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

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

Запуск анализа кода

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

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

  • В меню Сборка выберите Выполнить анализ кода по решению.

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

  1. В Обозреватель решений выберите имя проекта.

  2. В меню "Сборка" выберите "Выполнить анализ кода" в имени проекта.

Чтобы выполнить анализ кода в файле, выполните следующую команду:

  1. В Обозреватель решений выберите имя файла.

  2. В меню "Сборка" выберите команду "Выполнить анализ кода" в файле или нажмите клавиши CTRL+SHIFT+ALT+F7.

    Будет выполнена компиляция проекта или решения и запуск анализа кода. Результаты отображаются в окне списка ошибок.

Анализ и устранение предупреждений анализа кода

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

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

Дважды щелкните предупреждение, чтобы переместить курсор в строку кода, вызвавшей предупреждение в редакторе кода. Или нажмите клавишу ВВОД в выбранном предупреждении.

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

Создание рабочих элементов для предупреждений анализа кода

Для регистрации ошибок в журнале из среды Visual Studio можно использовать функцию отслеживания рабочих элементов. Чтобы использовать эту функцию, необходимо подключиться к экземпляру Azure DevOps Server (ранее — Team Foundation Server).

Создание рабочего элемента для одного или нескольких предупреждений кода C/C++

  1. В списке ошибок разверните и выберите предупреждения

  2. В контекстном меню предупреждений выберите "Создать рабочий элемент" и выберите тип рабочего элемента.

  3. Visual Studio создает один рабочий элемент для выбранных предупреждений и отображает рабочий элемент в окне документа интегрированной среды разработки.

  4. Добавьте дополнительные сведения и нажмите кнопку "Сохранить рабочий элемент".

Поиск и фильтрация результатов анализа кода

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

  • Чтобы отфильтровать предупреждения по названию или идентификатору предупреждения: введите ключевое слово в поле "Список ошибок поиска".

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

См. также