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


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

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

Отображаться должно следующее

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

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

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

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

JJ159523.collapse_all(ru-ru,VS.110).gifТесты не были выполнены

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

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

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

JJ159523.collapse_all(ru-ru,VS.110).gifфайлы (символов) с расширением .pdb недоступны

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

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

    PDB-файл должен быть создан из той же сборки, что и файлы с расширениями .dll или .exe.

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

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

JJ159523.collapse_all(ru-ru,VS.110).gifИспользование инструментированного или оптимизированного двоичного файла

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

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

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

  • Решение
    Выключить оптимизацию и использовать новое построение.

JJ159523.collapse_all(ru-ru,VS.110).gifНеуправляемый код (.NET) или машинный код (C++)

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

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

  • Решение
    Нет.

JJ159523.collapse_all(ru-ru,VS.110).gifСборка была установлена с использованием технологии NGen

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

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

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

JJ159523.collapse_all(ru-ru,VS.110).gifПользовательский файл .runsettings с неверным синтаксисом

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

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

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

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

  • ошибка XML

    Откройте файл .runsettings в XML-редакторе Visual Studio.Просмотрите отмеченные ошибки.

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

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

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

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

JJ159523.collapse_all(ru-ru,VS.110).gifПользовательский файл .runsettings с неверными исключениями

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

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

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

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

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

JJ159523.collapse_all(ru-ru,VS.110).gifКод инициализации в машинных DLL выполняется перед инструментированием

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

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

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

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

См. также

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

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