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


Устранение неполадок с покрытием кода

Средство анализа покрытия кода в Visual Studio выполняет сбор данных для машинных и управляемых сборок (DLL- или EXE-файлы).Однако в некоторых случаях в окне результатов покрытия кода отображается ошибка, похожая на ошибку "Созданы пустые результаты: ...". Существует несколько возможных причин, по которым это может произойти.Сведения в этом разделе помогут устранить эту проблему.

Отображаемые сведения

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

Результаты покрытия кода с цветами

Дополнительные сведения см. в разделе Использование покрытия кода для определения объема протестированного кода.

Возможные причины отсутствия результатов или отображения старых результатов

Вы используете правильный выпуск Visual Studio?

Необходимо наличие Visual Studio Ultimate или Visual Studio Premium.

Тесты не выполнены

  • Анализ
    Проверьте окно вывода.В раскрывающемся списке Показать выходные данные от выберите Тесты.Проверьте, были ли зарегистрированы какие-либо предупреждения или ошибки.

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

  • Решение
    В обозревателе тестов щелкните Запустить все, чтобы проверить успешное выполнение тестов.Исправьте все ошибки перед выполнением команды Анализ покрытия кода.

Отображается предыдущий результат

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

  1. Выполните команду "Анализ покрытия кода".

  2. Убедитесь, что выбран последний набор результатов в окне "Результаты покрытия кода".

Недоступны PDB-файлы (файлы символов)

  • Анализ
    Откройте предназначенную для компиляции папку (обычно это папка bin\debug) и убедитесь, что для каждой сборки существует PDB-файл в том же каталоге, что и DLL-файл или EXE-файл.

  • Объяснение
    Анализатору покрытия кода необходимо, чтобы каждая сборка имела связанный с ней PDB-файл, доступный во время тестового запуска.Если PDB-файл не существует для определенной сборки, она не будет проанализирована.

    PDB-файл должен быть создан из той же сборки, что и DLL-файл или EXE-файл.

  • Решение
    Убедитесь, что в параметрах сборки указано создание PDB-файла.Если PDB-файлы не обновляются при сборке проекта, откройте свойства проекта, выберите страницу Сборка, щелкните Дополнительно и проверьте сведения в поле Отладочная информация.

    Если PDB-файл и DLL-файл или EXE-файл находятся в разных местах, скопируйте PDB-файл в тот же каталог.Также можно настроить анализатор покрытия кода для поиска PDB-файлов в другом расположении.Дополнительные сведения см. в разделе Настройка анализа покрытия кода.

Использование инструментированного или оптимизированного двоичного файла

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

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

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

  • Решение
    Отключите оптимизацию и используйте новую сборку.

Неуправляемый код (.NET) или машинный код (C++)

  • Анализ
    Убедитесь, выполняются тесты управляемого кода или кода C++.

  • Объяснение
    Анализ покрытия кода в Visual Studio доступен только для управляемого и машинного кода (C++).При работе со средствами сторонних разработчиков часть кода или весь код может выполняться на другой платформе.

  • Решение
    Недоступно.

Сборка установлена с помощью NGen

  • Анализ
    Убедитесь, что сборка не была загружена из кэша образов в машинном коде.

  • Объяснение
    Из соображений производительности сборки образов в машинном коде не анализируются.Дополнительные сведения см. в разделе Ngen.exe (генератор образов в машинном коде).

  • Решение
    Используйте MSIL-версию сборки.Не обрабатывайте ее с помощью NGen.

Пользовательский RUNSETTINGS-файл с неверным синтаксисом

  • Анализ
    Если используется пользовательский RUNSETTINGS-файл, он может содержать синтаксические ошибки.

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

  • Объяснение
    Можно выполнить модульные тесты, используя пользовательский RUNSETTINGS-файл, чтобы настроить параметры покрытия кода.С помощью параметров можно включать или исключать файлы.Дополнительные сведения см. в разделе Настройка анализа покрытия кода.

  • Решение
    Существует два возможных типа ошибок:

  • Ошибка XML

    Откройте RUNSETTINGS-файл в редакторе XML Visual Studio.Найдите ошибки.

  • Ошибка в регулярном выражении

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

    • Несоответствующие круглые скобки (...) или круглые скобки без escape-последовательности \(...\).Для сопоставления с круглыми скобками в строке поиска необходимо установить для них escape-последовательность.Например, для сопоставления с функцией используйте выражение .*MyFunction\(double\)

    • Звездочка или плюс в начале выражения.Для сопоставления с любой строкой символов используйте точку со следующей за ней звездочкой: .*

Пользовательский RUNSETTINGS-файл с неверными исключениями

  • Анализ
    Если используется пользовательский RUNSETTINGS-файл, проверьте, что он включает в себя вашу сборку.

  • Объяснение
    Можно выполнить модульные тесты, используя пользовательский RUNSETTINGS-файл, чтобы настроить параметры покрытия кода.С помощью параметров можно включать или исключать файлы.Дополнительные сведения см. в разделе Настройка анализа покрытия кода.

  • Решение
    Удалите все узлы Include из RUNSETTINGS-файла, а затем удалите все узлы Exclude.Если это не решит проблему, последовательно верните их обратно.

    Убедитесь, что узел DataCollectors определяет покрытие кода.Сравните его с примером в разделе Настройка анализа покрытия кода.

Часть кода всегда отображается как непокрытая

Код инициализации в машинных библиотеках DLL выполняется до инструментирования

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

  • Объяснение
    Анализатор покрытия кода вставляет инструментирование в сборку непосредственно перед началом выполнения приложения.В любой сборке, загруженной до этого времени, код инициализации в DllMain выполняется сразу после загрузки сборки и до выполнения приложения.Этот код будет отображаться как непокрытый.

    Обычно это применяется к статически загружаемым сборкам.

  • Решение
    Отсутствуют.

См. также

Другие ресурсы

Использование покрытия кода для определения объема протестированного кода