Примечание
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Средство проверки приложений (AppVerifier) — это средство проверки среды выполнения для неуправляемого кода, который помогает находить тонкие ошибки программирования, проблемы безопасности и проблемы с привилегиями учетной записи пользователя, которые могут быть трудно определить с обычными методами тестирования приложений.
Для доставки надежных приложений Windows:
- Тестирование приложений, написанных в неуправляемом (машинном) коде с помощью средства проверки приложений в отладчике и с полностраничной кучей перед выпуском клиентам.
- Выполните действия, предоставляемые средством проверки приложений, чтобы устранить условия нерегулируемых действий.
- После выпуска приложения регулярно отслеживайте собранные отчеты о сбоях приложения, например при наличии отчетов об ошибках Windows.
Проверки пула потоков включены по умолчанию в заголовке проверки "Основные сведения". Так как это включено в параметр по умолчанию, пользователям необходимо запускать только средство проверки приложений в коде с параметрами по умолчанию для использования этих и других важных проверок.
Настройка средства проверки приложений
Настройка отладчика
Проверяемое приложение должно выполняться в отладчике пользовательского режима или система должна работать под отладчиком ядра, так как при возникновении ошибки он будет остановлен на отладчике. Дополнительные сведения об отладчике см. в статье Проверки приложений. Отладка средства проверки приложений останавливает.
Настройки
Средство проверки приложений не может быть включено для запущенного процесса. В результате необходимо сделать параметры, как описано ниже, а затем запустить приложение. Параметры сохраняются до явного удаления. Поэтому независимо от того, сколько раз вы запускаете приложение, оно начнется с включения AppVerifier до удаления параметров.
Использование теста "Основные сведения о проверке приложений"
В приведенных ниже сценариях показаны рекомендуемые параметры командной строки и пользовательского интерфейса. Они должны выполняться во время всех тестов, которые выполняют код, чтобы обеспечить полное покрытие. Ожидание этих сценариев заключается в том, что приложение не прерывается в отладчик и все тесты проходят с той же скоростью передачи, что и при запуске без включения AppVerifier.
Включите средство проверки для приложений, которые вы хотите протестировать. Из командной строки: appverif /verify MyApp.exe
.
В пользовательском интерфейсе: добавьте приложение правой кнопкой мыши в области "Приложения" и выбрав "Добавить приложение". Выберите основные сведения из области "Тесты". Нажмите кнопку Сохранить.
Примечания:
/verify включает базовые тесты
При тестировании библиотеки DLL необходимо включить средство проверки приложений для тестового исполняемого файла, выполняющего библиотеку DLL.
Запустите уровни проверки отдельно. Например, в одном сеансе включите все основные сведения и в другом включите все проверки LuaPriv.
Запустите все тесты, выполняющие приложение.
Анализ всех обнаруженных разрывов отладчика. Если возникает разрыв, необходимо понять его и исправить. ПРИМЕЧАНИЕ. Содержимое справки содержит сведения о разрывах и способах их изучения.
По завершении удалите все параметры. Из командной строки: appverif /n MyApp.exe
.
В пользовательском интерфейсе удалите приложение, щелкнув правой кнопкой мыши область "Приложения" и выбрав "Удалить приложение". Затем нажмите кнопку "Сохранить".
Повреждение кучи
Почти 10% сбоев приложений в системах Windows вызваны повреждением кучи. Эти сбои почти невозможно отлаживать после факта. Лучший способ избежать этих проблем заключается в тестировании функций кучи страниц, найденных в средстве проверки приложений. Существует два варианта страницы кучи: "Полный" и "Свет". Полное значение по умолчанию; При обнаружении повреждения отладчик немедленно остановится. Эта функция должна выполняться в отладчике. Однако это также самый ресурсоемкий. Если у пользователя возникают проблемы с временем и уже запущен сценарий в разделе "Полная куча страницы", присвойте ему значение Light, скорее всего, устранит эти проблемы. Кроме того, световая куча страницы не завершает работу, пока процесс не завершится. Он предоставляет трассировку стека для выделения, но может занять значительно больше времени для диагностики, чем использование его полного аналога.
Использование моделирования низких ресурсов 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 — это стандартное имя уровня проверки. Если установлен новый поставщик проверки, он предоставит новое имя слоя проверки, которое будет использоваться в командной строке. Примерами являются кучи, дескрипторы или блокировки.
Чтобы указать, что команда применяется ко всем слоям, можно задать значение "СЛОЙ".
TARGET — это двоичное имя (например, notepad.exe). Это статический параметр, который сохраняется в реестре и учитывается при запуске приложения. Для команды appverif –disable можно задать target значение *, чтобы указать, что все целевые объекты должны быть отключены.
СВОЙСТВО — это имя свойства, конкретное для СЛОЯ, указанного в командной строке. Например, слой Handles имеет трассировки в качестве свойства.
ЗНАЧЕНИЕ — это значение свойства. Тип значения зависит от типа, связанного с свойством, и он будет применен. Поддерживаемые типы сейчас: boolean (true/false), целое число (десятичное или восьмеричное/шестнадцатеричное значение в нотации C), строка и многострочная (содержащая \0’ between strings and being terminated by
\0\0'). Если значение не указано, это означает, что пользователь хочет удалить это свойство и вернуть поведение к значению по умолчанию для свойства.
STOP — это число (десятичное или шестнадцатеричное значение в нотации C) проблемы остановки проверяющего средства, настроенной. Коды остановки должны быть уникальными (ни один из двух слоев не может использовать один и тот же код остановки, поэтому сам инструмент определит, к какому уровню принадлежит остановка).
STOPPROPERTY — это имя свойства, допустимое для остановок проверяющего средства. Если значение не указано, предполагается, что свойство должно быть удалено. Допустимые свойства для остановок : (Дополнительные сведения см. в разделе "Настройка остановок проверяющего средства" ниже):
- Отчет об ошибке
- Степень серьезности
- Вкус
Свойства могут быть дополнительно квалифицированы слоем, к которому они относятся. Однако это не требуется, если командная строка включает только один слой. Например, чтобы включить два уровня с именем 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.10000000. Если значение по умолчанию не задано, равно 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", "Серьезность" и "Вкус"
Для ErrorReport значение может быть сочетанием следующих значений.
0x00000001 означает, что остановка активна. (Если этот бит равен нулю, это означает, что остановка отключена)
0x00000020 означает, что остановка будет прерываться в отладчик с помощью точки останова.
0x00000040 означает, что остановка останова в отладчике создается исключение проверяющего средства.
0x00000080 означает, что остановка будет входить в файл журнала.
0x00000100 означает, что трассировка стека для этой остановки будет зарегистрирована в файле журнала.
Для серьезности значение может быть одним из следующих значений.
0x00000003 Информативная остановка.
предупреждение 0x0000000F.
ошибка 0x0000003F.
Для вкуса значение может быть сочетанием следующих значений.
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
Параметры остановки проверяющего средства — дополнительные параметры
Средство проверки приложений имеет дополнительные параметры, такие как inactivate, которые можно изменить на остановку проверяющего средства.
Параметры остановки средства проверки доступа. Параметры остановки проверяющего средства изменяются в диалоговом окне, в списке доступных параметров. Чтобы получить доступ к параметрам остановки проверяющего средства, выполните следующие действия.
- Выберите имя теста на панели "Тесты".
- В меню "Изменить" выберите "Параметры остановки проверяющего средства" или щелкните тест правой кнопкой мыши и выберите пункт "Параметры остановки проверяющего средства".
Параметры остановки проверяющего средства
Вы можете изменить следующие элементы на остановку проверяющего средства, щелкнув код остановки (обратите внимание, что при щелчке появится описание остановки).
Неактивный — это флажок, который при выборе деактивирует код остановки проверки от запуска.
Серьезность определяет, как следует пометить остановку проверяющего средства:
- Игнорировать
- Информация
- Предупреждение
- Ошибка
Отчеты об ошибках определяют, как следует сообщать или регистрировать конкретную остановку проверяющего средства:
Войдите в файл — флажок, который при выборе будет записываться в указанный файл.
Трассировка стека журналов — флажок, который при выборе будет регистрировать трассировки стека, когда они доступны.
Нет перерыва — параметр не прерывать в отладчике.
Исключение — параметр без точки останова и точки останова
Точка останова — параметр без перерыва или исключения.
Другие варианты предоставляют два варианта
Остановить один раз — флажок, который при выборе будет останавливаться только на этой ошибке один раз при тестировании приложения.
Не континууируемый — флажок, который при выборе не позволит продолжить работу без изучения.
См. также
средство проверки приложений — обзор
средство проверки приложений — функции
средство проверки приложений — тесты в проверяющего приложения
средство проверки приложений — остановки кодов и определений
средство проверки приложений— отладка средства проверки приложений останавливает
средство проверки приложений — часто задаваемые вопросы