Средство проверки приложений — тестирование приложений

Средство проверки приложений (AppVerifier) — это средство проверки времени выполнения для неуправляемого кода, которое помогает находить небольшие ошибки программирования, проблемы безопасности и проблемы с ограниченными привилегиями учетных записей пользователей, которые могут быть трудно определить с помощью обычных методов тестирования приложений.

Для предоставления надежных приложений Windows:

  1. Протестируйте приложения, написанные в неуправляемом (машинном) коде, с помощью средства проверки приложений в отладчике и полностраничной кучи, прежде чем выпустить его для клиентов.
  2. Выполните действия, предоставленные средством проверки приложений, чтобы устранить ошибочные условия.
  3. После выпуска приложения регулярно отслеживайте собранные отчеты о сбоях приложения, например отчеты об ошибках Windows, если они доступны.

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

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

Настройка отладчика

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

Параметры

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

Тестирование основных сведений об использовании средства проверки приложений

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

Включите средство проверки для приложений, с которыми вы хотите протестировать. Из командной строки: appverif /verify MyApp.exe.

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

Примечания.

/verify включит базовые тесты

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

Запустите уровни проверки отдельно. Например, в одном сеансе включите все основные сведения, а в другом — все проверки LuaPriv.

Запустите все тесты, выполняющие приложение.

Проанализируйте все возникшие разрывы отладчика. Если возникает перерыв, необходимо понять его и исправить. ПРИМЕЧАНИЕ. В содержимом справки содержатся сведения о перерывах и способах их изучения.

По завершении удалите все параметры. Из командной строки: appverif /n MyApp.exe.

В пользовательском интерфейсе удалите приложение, щелкнув правой кнопкой мыши в области Приложения и выбрав Удалить приложение. Нажмите кнопку Сохранить.

Повреждение кучи

Почти 10 % сбоев приложений в системах Windows вызваны повреждением кучи. Эти сбои почти невозможно выполнить отладку после факта. Лучший способ избежать этих проблем — протестировать функции кучи страниц, доступные в средстве проверки приложений. Существует два варианта кучи страниц: "Полный" и "Светлый". По умолчанию используется значение Full; при обнаружении повреждения отладчик будет немедленно останавливаться. Эту функцию необходимо запускать в отладчике. Однако она также является наиболее ресурсоемким. Если у пользователя возникают проблемы со временем и он уже выполнил сценарий в "Полной" кучи страницы, установка для него значения "Свет", скорее всего, устранит эти проблемы. Кроме того, куча светлых страниц не аварийно завершает работу до завершения процесса. Он предоставляет трассировку стека для выделения, но может занять значительно больше времени, чем использование полного аналога.

Использование Моделирования с низким уровнем ресурсов AppVerifier (внедрение ошибок)

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

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

Включите имитацию низких ресурсов средства проверки приложений (внедрение ошибок) для приложений. Из командной строки: Appverif /verify MyApp.exe /faults. В пользовательском интерфейсе: добавьте приложение, щелкнув правой кнопкой мыши в области Приложения и выбрав Добавить приложение. Выберите имитацию с низким уровнем ресурсов в области Тесты. Нажмите кнопку Сохранить.

Примечание. При тестировании библиотеки DLL можно применить моделирование с низким объемом ресурсов (внедрение ошибок) к определенной библиотеке DLL, а не ко всему процессу. Формат командной строки будет следующим:

appverif /verify TARGET [/faults [PROBABILITY [TIMEOUT [DLL …]]]]

Пример

appverif /verify mytest.exe /faults 50000 1000 d3d9.dll

Выполнение всех тестов, выполняющих приложение

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

По завершении удалите все параметры. Из командной строки: appverif /n MyApp.exe. В пользовательском интерфейсе: удалите приложение, щелкнув правой кнопкой мыши в области Приложения и выбрав Удалить приложение , нажав кнопку Сохранить.

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

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

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

Анализ данных AppVerifier

Все данные, созданные во время анализа AppVerifier, хранятся в папке %USERPROFILE%\AppVerifierLogs в двоичном формате. Затем эти журналы можно преобразовать в XML с помощью пользовательского интерфейса или командной строки для дальнейшего анализа.

Для просмотра XML-файлов можно использовать любое средство для просмотра XML, например импорт в Microsoft Excel— импорт XML-файла в Excel и использование фильтров или сводных таблиц для реорганизации и анализа собранных данных.

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

Средство проверки приложений можно использовать через пользовательский интерфейс или с помощью параметров командной строки.

Ниже приведены примеры использования командной строки (ниже приведены подробные сведения):

appverif /verify TARGET [/faults [PROBABILITY [TIMEOUT [DLL …]]]]

appverif /verify notepad

appverif -enable LAYER … -for TARGET ... [-with [LAYER].PROPERTY=[VALUE] …] 

appverif -disable LAYER ... -for TARGET ...

appverif -query LAYER ... -for TARGET ...

appverif –configure STOP ... -for TARGET ... [-with STOPPROPERTY=[VALUE] …]

appverif –logtofile {enable|disable}

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

appverif –enable Heaps Locks –for notepad.exe iexplore.exe

Чтобы включить два слоя с именами X и Y для целевого test.exe со свойствами X.DebugLevel и Y.DebugLevel:

appverif –enable X Y –for test.exe –with X.DebugLevel=1 Y.DebugLevel=2

Чтобы отключить все проверки, выполните в приложении:

appverif -disable * -for notepad.exe

ИЛИ

appverif -delete settings -for notepad.exe

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

appverif –logtofile enable

appverif –logtofile disable

Ведение журнала включено по умолчанию для всех процессов.

Синтаксис командной строки средства проверки приложений

Использование командной строки средства проверки приложений:

-enable TEST ... -for TARGET ... [-with [TEST.]PROPERTY=VALUE ...]
-disable TEST ... -for TARGET ...
-query TEST ... -for TARGET ...
-configure STOP ... -for TARGET ... -with PROPERTY=VALUE...
-verify TARGET [-faults [PROBABILITY [TIMEOUT [DLL ...]]]]
-export log -for TARGET -with To=XML_FILE [Symbols=SYMBOL_PATH] [StampFrom=LOG_STAMP] [StampTo=LOG_STAMP] [Log=RELATIVE_TO_LAST_INDEX]
-delete {logs|settings} -for TARGET ...
-stamp log -for TARGET -with Stamp=LOG_STAMP [Log=RELATIVE_TO_LAST_INDEX]
-logtoxml LOGFILE XMLFILE
-installprovider PROVIDERBINARY
-sppath [PROTECTED_PROCESS_LOG_PATH]
-cppath
-logtofile [enable | disable]

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

appverif -enable LAYER ... -for TARGET ... [-with [LAYER].PROPERTY=[VALUE] …] appverif -disable LAYER ... -for TARGET ... appverif -query LAYER ... -for TARGET ... appverif –configure STOP ... -for TARGET ... [-with STOPPROPERTY=[VALUE] …]

где:

LAYER — это стандартное имя уровня проверки. Если установлен новый поставщик средства проверки, будет предоставлено новое имя слоя проверки, которое будет использоваться в командной строке. Примеры слоев: Куча, Дескрипторы или Блокировки.

Вы можете задать для параметра LAYER значение * , чтобы указать, что команда применяется ко всем слоям.

TARGET — это двоичное имя (например, notepad.exe). Это статический параметр, который сохраняется в реестре и будет учитываться при каждом запуске приложения. Для команды appverif –disable можно задать для параметра TARGET значение * , чтобы указать, что все целевые объекты должны быть отключены.

PROPERTY — это имя свойства, специфичное для объекта LAYER, указанного в командной строке. Например, уровень Handles имеет трассировки в качестве свойства .

VALUE — это значение свойства . Тип значения зависит от типа, связанного со свойством, и он будет применяться. На данный момент поддерживаются следующие типы: boolean (true/false), integer (decimal/octal/hex в нотации C), string и multi-string (содержит \0’ between strings and being terminated by \0\0'). Если значение не указано, это означает, что пользователь хочет удалить это свойство и отменить изменения поведение до значения по умолчанию для свойства.

STOP — это число (десятичное или шестнадцатеричное значение в нотации C) для настройки проблемы остановки проверяющего средства. Коды остановки должны быть уникальными (два слоя не могут использовать один и тот же код остановки, поэтому само средство определяет, к какому уровню относится остановка).

STOPPROPERTY — это имя свойства, приемлемое для остановок проверяющего средства. Если значение не указано, предполагается, что свойство должно быть удалено. Допустимые свойства для остановок: (Дополнительные сведения см. в разделе Настройка остановок средства проверки ниже):

  • ErrorReport
  • Статус
  • Вкус

Свойства могут быть дополнительно квалифицироваться слоем, к которому они относятся. Однако это не требуется, если в командной строке включен только один уровень. Например, чтобы включить два уровня с именами X и Y для целевого test.exe со свойствами X.DebugLevel и Y.DebugLevel, выполните следующую команду:

appverif –enable X Y –for test.exe –with X.DebugLevel=1 Y.DebugLevel=2

Однако если включен уровень X, можно использовать неквалифицированное имя свойства:

appverif –enable X –for test.exe –with DebugLevel=1

Символ-разделитель между именем свойства и значением может быть = (знак равенства) или : (двоеточие).

Разные команды

appverif –query providers

appverif –delete logs –for TARGET ...

appverif –delete settings –for TARGET ...

Полностью удалить target из реестра.

appverif –stamp log –for Target –with Stamp=”LOG_STAMP”[Log= RELATIVE_TO_LAST_INDEX]

Эта команда пометит журнал LOG_STAMP. Эта метка полезна для идентификации только раздела журнала как релевантного при просмотре журнала в XML-форме.

appverif –export log –for TARGET –with To=XML_FILE[Symbols=SYMBOL_PATH][Stamp=LOG_STAMP][StampTo=LOG_STAMP][Log=RELATIVE_TO_LAST_INDEX]

Приведенная выше команда экспортирует двоичный журнал в XML-файл. Необязательное свойство Stamp используется для определения того, какая часть журнала должна быть экспортирована в XML. Если этот параметр не указан, будет преобразован весь журнал. Свойство Log имеет отрицательное целое значение и указывает, какой файл журнала следует преобразовать, начиная с последнего (предполагается, если свойство отсутствует). Например, запустите notepad.exe три раза подряд. Чтобы получить доступ к первому созданному журналу, укажите Log=-2 в командной строке.

Сочетания клавиш для командной строки

Ниже приведены сочетания клавиш.

appverif /verify TARGET [/faults [PROBABILITY [TIMEOUT [DLL …]]]]

где:

Target имеет то же значение, что и описано выше.

ВЕРОЯТНОСТЬ — это вероятность внедрения ошибок. Должно быть значением в диапазоне 0..1000000. Если значение не указано, значение по умолчанию — 5 %.

TIMEOUT — это интервал времени в миллисекундах во время запуска процесса, когда внедрение ошибки не происходит. Это делается для правильного запуска процесса до возникновения ошибок. Если значение не указано, значение равно 500 мс.

DLL — это имя модуля, который загружается в процессе. Обычно это имя динамической библиотеки (расширение .dll), но может быть ActiveX (расширение OCX) или другой загружаемый модуль.

Примеры:

appverif /verify notepad.exe /faults 100000 1000 msvcrt.dll

Включите внедрение ошибок для notepad.exe (при каждом запуске). Ошибки должны происходить с вероятностью 10 %, только 1000 мс после запуска процесса и только для операций, инициированных из msvcrt.dll.

Включение сведений о внедрении ошибок

Использование командной строки /faults позволит реализовать внедрение ошибок только для OLE_ALLOC и HEAP_ALLOC. Однако можно использовать командную строку, чтобы настроить тип внедрения ошибок, который требуется включить. Например, если вы хотите внедрить ошибку в API реестра или файла как 2 %, используйте командную строку:

appverif -enable lowres -for hello.exe -with registry=20000 file=20000

Еще один пример:

appverif -query lowres -for hello.exe

Settings for hello.exe:
Test [lowres] enabled.

Include = *
Exclude =
TimeOut = 2000 (0x7D0)
WAIT = 0 (0x0)
HEAP_ALLOC = 20000 (0x4E20)
VIRTUAL_ALLOC = 0 (0x0)
REGISTRY = 20000 (0x4E20)
FILE = 20000 (0x4E20)
EVENT = 0 (0x0)
MAP_VIEW = 0 (0x0)
OLE_ALLOC = 20000 (0x4E20)
STACKS = false

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

С помощью командной строки (или пользовательского интерфейса) можно настроить остановки средства проверки. Ниже приведены примеры использования.

Appverif -configure STOP ... -for TARGET ... -with PROPERTY=VALUE ...

STOP — это код остановки, например 0x200 0x201

TARGET — это имя приложения, например foo.exe

СВОЙСТВО может быть одним из значений ErrorReport, Severity и Flavor.

Для ErrorReport ЗНАЧЕНИЕ может быть сочетанием следующих значений.

0x00000001 означает, что остановка активна. (Если этот бит равен нулю, это означает, что остановка отключена)

0x00000020 означает, что остановка будет прерваться в отладчик с помощью точки останова.

0x00000040 означает остановку останова в отладчике путем создания исключения проверяющего.

0x00000080 означает, что остановка будет зарегистрирована в файле журнала.

0x00000100 означает, что трассировка стека для этой остановки будет зарегистрирована в файле журнала.

Для параметра Серьезность ЗНАЧЕНИЕ может иметь одно из следующих значений.

0x00000003 Информативная остановка.

предупреждение 0x0000000F.

Ошибка 0x0000003F.

Для свойства Flavor значение может быть сочетанием следующих значений.

0x00000002 непеременимая остановка.

0x00000010 Эта остановка появится только один раз. Он будет игнорироваться в следующий раз в ходе тестового запуска.

Например, отключите остановки 0x2700 0x2701 для foo.exe

Appverif –configure 0x2700 0x2701 –for foo.exe –with ErrorReport=0

Настройте код остановки 0x2700 как прерывание работы отладчика (по умолчанию он отключен), сохранение журнала без трассировки стека и его невозможность непрерывного выполнения.

Appverif –configure 0x2700 –for foo.exe –with ErrorReport=0xA1 Flavor=0x2

Параметры остановки средства проверки — дополнительные параметры

Средство проверки приложений имеет дополнительные параметры, такие как Инактивация, которые можно изменить при каждой остановке средства проверки.

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

  1. Выберите имя теста в области Тесты.
  2. В меню Правка выберите Параметры остановки проверяющего средства или щелкните тест правой кнопкой мыши и выберите Пункт Параметры остановки проверяющего средства.

Параметры остановки средства проверки

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

Неактивный — это флажок, который, если этот флажок установлен, отключит выполнение кода средства проверки.

Серьезность определяет, как следует пометить остановку проверяющего средства.

  • Игнорировать
  • Сведения
  • Предупреждение
  • Ошибка

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

Log to File (Журнал в файл) — флажок, который будет выполняться в указанном файле.

Трассировка стека журналов — флажок, который при выборе будет регистрировать трассировки стека, когда они будут доступны.

Нет прерывания — параметр, который не следует прерывать в отладчике.

Исключение — параметр без останова и точки останова.

Точка останова — параметр без прерывания или исключения.

Прочее предоставляет два варианта

Остановить один раз — флажок, который при выборе будет останавливаться на этой ошибке только один раз при тестировании приложения.

Not Continuable — флажок, который, если он установлен, не позволит продолжить работу без изучения.

См. также:

Средство проверки приложений — обзор

Средство проверки приложений — функции

Средство проверки приложений — тесты в приложении

Средство проверки приложений — остановка кодов и определений

Средство проверки приложений — отладка остановки средства проверки приложений

Средство проверки приложений — часто задаваемые вопросы