Compartir a través de


Comprobador de aplicaciones: pruebas de aplicaciones

Application Verifier (AppVerifier) es una herramienta de verificación en tiempo de ejecución para código no administrado que ayuda a encontrar errores de programación sutiles, problemas de seguridad y problemas de privilegios limitados de cuentas de usuario que pueden ser difíciles de identificar con técnicas normales de prueba de aplicaciones.

Para ofrecer aplicaciones de Windows confiables:

  1. Pruebe las aplicaciones escritas en código no administrado (nativo) con Application Verifier en el depurador y con montón de página completa antes de publicarlas en los clientes.
  2. Siga los pasos proporcionados por Application Verifier para resolver las condiciones errantes.
  3. Una vez publicada la aplicación, supervise periódicamente los informes de errores de la aplicación recopilados, por ejemplo, por Informe de errores de Windows si están disponibles.

Las comprobaciones del grupo de subprocesos están habilitadas de forma predeterminada en el encabezado de comprobación "Aspectos básicos". Como se incluye en la configuración predeterminada, los usuarios solo deben ejecutar Application Verifier en su código con la configuración predeterminada para aprovechar estas y otras comprobaciones importantes.

Configuración del comprobador de aplicaciones

Configuración del depurador

La aplicación que se está comprobando debe ejecutarse en un depurador en modo de usuario o el sistema debe ejecutarse en un depurador de kernel, ya que se interrumpirá en un depurador cuando se produzca un error. Consulte Application Verifier - Debugging Application Verifier Stops para obtener más detalles del depurador.

Configuración

El Comprobador de aplicaciones no se puede habilitar para un proceso en ejecución. Como resultado, debe realizar la configuración como se describe a continuación e iniciar la aplicación. La configuración es persistente hasta que se elimina explícitamente. Por lo tanto, independientemente de cuántas veces inicie una aplicación, se iniciará con AppVerifier habilitado hasta que se elimine la configuración.

Uso de pruebas básicas del comprobador de aplicaciones

En los escenarios siguientes se muestran las opciones recomendadas de la línea de comandos y la interfaz de usuario. Estos deben ejecutarse durante todas las pruebas que ejercen el código para garantizar una cobertura completa. La expectativa de estos escenarios es que la aplicación no se interrumpa en el depurador y todas las pruebas se superen con la misma velocidad de pase que cuando se ejecuta sin AppVerifier habilitado.

Habilite el comprobador para las aplicaciones que desea probar mediante. Desde la línea de comandos: appverif /verify MyApp.exe.

En la interfaz de usuario: agregue la aplicación haciendo clic con el botón derecho en el área Aplicaciones y seleccionando Agregar aplicación. Seleccione los aspectos básicos en el área Pruebas. Haga clic en el botón Guardar.

Notas:

/verify habilitará las pruebas básicas

Si va a probar un archivo DLL, el Comprobador de aplicaciones debe habilitarse para el ejecutable de prueba que está realizando el ejercicio del archivo DLL.

Ejecute las capas de comprobación por separado. Por ejemplo, en una sesión, habilite todos los conceptos básicos y, en otro, habilite todas las comprobaciones de LuaPriv.

Ejecute TODAS las pruebas que ejercen la aplicación.

Analice los saltos de depurador encontrados. Si se produce una interrupción, deberá comprenderla y corregirla. NOTA: El contenido de la ayuda proporciona detalles sobre los saltos y cómo investigarlos.

Cuando haya terminado, elimine toda la configuración. Desde la línea de comandos: appverif /n MyApp.exe.

En la interfaz de usuario, quite la aplicación haciendo clic con el botón derecho en el área Aplicaciones y seleccionando Eliminar aplicación. A continuación, haga clic en el botón Guardar.

Daños en el montón

Casi el 10 % de los bloqueos de la aplicación en los sistemas Windows se deben a daños en el montón. Estos bloqueos son casi imposibles de depurar después del hecho. La mejor manera de evitar estos problemas es probar con las características del montón de páginas que se encuentran en comprobador de aplicaciones. Hay dos tipos de Montón de páginas: "Full" y "Light". Full es el valor predeterminado; forzará la detención de un depurador al instante al detectar daños. Esta característica DEBE ejecutarse mientras se encuentra en el depurador. Sin embargo, también es el más exigente de los recursos. Si un usuario tiene problemas de tiempo y ya ha ejecutado un escenario en "Montón de página completa", establecerlo en "Light" probablemente solucionará estos problemas. Además, el montón de páginas ligeras no se bloquea hasta que se cierra el proceso. Proporciona un seguimiento de pila a la asignación, pero puede tardar considerablemente más tiempo en diagnosticarse que aprovechar su homólogo completo.

Uso de la simulación de recursos bajos de AppVerifier (inyección de errores)

La expectativa de este escenario es que la aplicación no se interrumpa en el depurador. Al no dividir en el depurador, significa que no hay errores que deban solucionarse.

La tasa de superación de las pruebas puede disminuir significativamente, ya que las inyecciones de errores aleatorias se introducen en el funcionamiento normal.

Habilite la simulación de recursos bajos del comprobador de aplicaciones (inyección de errores) para las aplicaciones. Desde la línea de comandos: Appverif /verify MyApp.exe /faults. En la interfaz de usuario: agregue la aplicación haciendo clic con el botón derecho en el área Aplicaciones y seleccionando Agregar aplicación . Seleccione la simulación de recursos bajos en el área Pruebas. Haga clic en el botón Guardar.

Nota: Si está probando un archivo DLL, puede aplicar una simulación de recursos baja (inyección de errores) en un archivo DLL determinado en lugar de todo el proceso. El formato de la línea de comandos sería:

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

Ejemplo:

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

Ejecutar TODAS las pruebas que ejercen la aplicación

Analice los saltos de depurador encontrados. Si se produce una interrupción, deberá comprenderla y corregirla.

Cuando haya terminado, elimine toda la configuración. Desde la línea de comandos: appverif /n MyApp.exe. En la interfaz de usuario: quite la aplicación haciendo clic con el botón derecho en el área Aplicaciones y seleccionando Eliminar aplicación , haciendo clic en el botón Guardar.

Nota: Ejecutar con y sin ejercicios de inyección de errores en gran medida diferentes rutas de acceso de código en una aplicación y, por lo tanto, ambos escenarios deben ejecutarse para obtener la ventaja completa de AppVerifier.

Uso del comprobador de aplicaciones con WOW64

Puede usar la versión de 32 bits o la versión de 64 bits de Application Verifier para comprobar una aplicación de 32 bits que se ejecuta en WOW64.

Análisis de datos de AppVerifier

Todos los datos creados durante el análisis de AppVerifier se almacenan en la carpeta %USERPROFILE%\AppVerifierLogs en un formato binario. Estos registros se pueden convertir a XML a través de la interfaz de usuario o la línea de comandos para su posterior análisis.

Para ver los archivos XML, puede usar cualquier herramienta para ver el XML, por ejemplo, importar en Microsoft Excel: importar el archivo XML en Excel y usar filtros o tablas dinámicas para reorganizar y analizar los datos recopilados.

Usar la línea de comandos

El Comprobador de aplicaciones se puede usar a través de la interfaz de usuario o mediante opciones de línea de comandos.

A continuación se muestran ejemplos de cómo usar la línea de comandos (a continuación se muestran los detalles):

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}

Para habilitar el Comprobador de aplicaciones para una capa de comprobación específica para dos aplicaciones:

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

Para habilitar dos capas denominadas X e Y para test.exe de destino con las propiedades X.DebugLevel y Y.DebugLevel:

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

Para deshabilitar todas las comprobaciones que se ejecutan en una aplicación:

appverif -disable * -for notepad.exe

O BIEN

appverif -delete settings -for notepad.exe

Para habilitar o deshabilitar globalmente el registro del comprobador de aplicaciones para todos los procesos:

appverif –logtofile enable

appverif –logtofile disable

El registro está habilitado de forma predeterminada para todos los procesos.

Sintaxis de la línea de comandos del comprobador de aplicación

Uso de la línea de comandos del comprobador de aplicaciones:

-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]

La sintaxis de la línea de comandos acepta una o varias capas y las aplica a uno o varios destinos con especificadores de propiedad opcionales para capas.

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] …]

donde:

LAYER es un nombre estándar para una capa de verificación. Si se instala un nuevo proveedor de comprobador, esto expondrá un nuevo nombre de capa de verificación que se usará en la línea de comandos. Las capas de ejemplo son Montón, Identificadores o Bloqueos.

Puede establecer LAYER en * para especificar que el comando se aplica a todas las capas.

TARGET es un nombre binario (por ejemplo, notepad.exe). Se trata de una configuración estática que se conserva en el Registro y se tendrá en cuenta siempre que se inicie la aplicación. Para el comando appverif –disable, puede establecer TARGET en * para especificar que todos los destinos deben deshabilitarse.

PROPERTY es el nombre de propiedad específico de la capa mencionada en la línea de comandos. Por ejemplo, la capa Handles tiene seguimientos como propiedad.

VALUE es un valor para la propiedad . El tipo del valor depende del tipo asociado a la propiedad y se aplicará. Los tipos admitidos por ahora son: booleano (true/false), entero (decimal/octal/hexadecimal en notación C), cadena y varias cadenas (que contienen \0’ between strings and being terminated by \0\0'). Si no se especifica VALUE, significa que el usuario quiere eliminar esa propiedad y revertir el comportamiento al valor predeterminado de la propiedad.

STOP es el número (decimal o hexadecimal en notación C) del problema de detención del comprobador que se va a configurar. Los códigos de detención deben ser únicos (no hay dos capas que puedan usar el mismo código de detención, por lo que la propia herramienta determinará a qué capa pertenece la parada).

STOPPROPERTY es un nombre de propiedad aceptable para las paradas del comprobador. Si no se especifica el valor, se supone que se debe eliminar la propiedad . Las propiedades permitidas para las paradas son (consulte Configuración de las paradas de comprobador a continuación para obtener más detalles):

  • ErrorReport
  • severity
  • Sabor

Opcionalmente, las propiedades pueden calificarse por la capa a la que pertenecen. Sin embargo, esto no es necesario si la línea de comandos habilita solo una capa. Por ejemplo, para habilitar dos capas denominadas X e Y para la test.exe de destino con las propiedades X.DebugLevel y Y.DebugLevel, el comando es:

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

Sin embargo, si la capa X está habilitada, se puede usar un nombre de propiedad no calificado:

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

El carácter separador entre el nombre de propiedad y el valor puede ser = (signo igual) o : (dos puntos).

Comandos varios

appverif –query providers

appverif –delete logs –for TARGET ...

appverif –delete settings –for TARGET ...

Elimine completamente TARGET del registro.

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

Este comando marcará el registro con LOG_STAMP. Esta marca es útil para identificar solo una sección de un registro como relevante al ver el registro en formato XML.

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

El comando anterior exportará un registro binario a un archivo xml. La propiedad Stamp opcional se usa para identificar qué parte del registro se debe exportar a XML. Si no se especifica, se convertirá todo el registro. La propiedad Log tiene un valor entero negativo como sea posible y indica qué archivo de registro se debe convertir a partir del último (se supone si la propiedad no está presente). Por ejemplo, inicie notepad.exe tres veces en una fila. Para acceder al primer registro creado, especifique Log=-2 en la línea de comandos.

Accesos directos para la línea de comandos

A continuación se muestran métodos abreviados:

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

donde:

TARGET tiene el mismo significado que se ha descrito anteriormente.

PROBABILIDAD es la probabilidad de insertar errores. Debe ser un valor en el intervalo 0..1000000. Si no se especifica, el valor predeterminado es 5 %.

TIMEOUT es el intervalo de tiempo en milisegundos durante el inicio del proceso cuando no se produce la inyección de errores. Esto se hace para permitir que el proceso se inicie correctamente antes de que se produzcan errores. Si no se especifica, el valor es 500 msecs.

DLL es el nombre del módulo que se carga en el proceso. Normalmente, este es el nombre de una biblioteca dinámica (extensión .dll), pero puede ser activeX (extensión .ocx) o algún otro módulo cargable.

Ejemplos:

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

Habilite la inserción de errores para notepad.exe (siempre que se inicie). Los errores deben producirse con probabilidad del 10 %, solo 1000 msec después de que se inicie el proceso y solo para las operaciones iniciadas desde msvcrt.dll.

Habilitación de los detalles de inserción de errores

El uso de la línea de comandos /faults habilitará la inserción de errores solo para OLE_ALLOC y HEAP_ALLOC. Sin embargo, puede usar la línea de comandos para configurar qué tipo de inyección de error desea activar. Por ejemplo, si desea insertar un error en una API de registro o archivo como 2 %, use la línea de comandos:

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

Otro ejemplo:

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

Configuración de las paradas del comprobador

Con la línea de comandos (o la interfaz de usuario), puede configurar las paradas del comprobador. A continuación se muestran ejemplos para aprovechar:

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

STOP es código de detención, como 0x200 0x201

TARGET es el nombre de la aplicación, como foo.exe

PROPERTY puede ser uno de los "ErrorReport", "Severity" y "Flavor"

Para ErrorReport , VALUE puede ser la combinación de los valores siguientes.

0x00000001 significa que la detención está activa. (Si este bit es cero, significa que la detención está deshabilitada)

0x00000020 significa que la detención se interrumpirá en el depurador mediante un punto de interrupción.

0x00000040 significa que se detiene la interrupción en el depurador mediante la generación de una excepción de comprobador.

0x00000080 significa que la detención se registrará en el archivo de registro.

0x00000100 significa que el seguimiento de la pila de esta detención se registrará en el archivo de registro.

Para la gravedad , VALUE puede ser uno de los siguientes.

0x00000003 parada informativa.

0x0000000F Advertencia.

0x0000003F Error.

Para Flavor , Value puede ser la combinación de los valores siguientes.

0x00000002 parada no continuable.

0x00000010 Esta detención solo aparecerá una vez. Se omitirá la siguiente hora dentro de la ejecución de pruebas.

Por ejemplo, deshabilitar detiene 0x2700, 0x2701 para foo.exe

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

Configure el código de detención 0x2700 como dividir en el depurador (está desactivado de forma predeterminada), guardar un registro sin seguimiento de pila y convertirlo en no continuable.

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

Opciones de detención del comprobador: configuración avanzada

Application Verifier tiene una configuración avanzada, como Inactivate, que puede modificar por cada detención del comprobador.

Opciones de detención del comprobador de acceso: las opciones de detención del comprobador se cambian en un cuadro de diálogo que enumera las opciones disponibles. Para acceder a las opciones de detención del comprobador:

  1. Seleccione el nombre de una prueba en el panel Pruebas.
  2. En el menú Editar, seleccione Opciones de detención del comprobador o haga clic con el botón derecho en la prueba y seleccione Opciones de detención del comprobador.

Opciones de detención del comprobador

Puede modificar los siguientes elementos por cada detención de comprobador enumerados haciendo clic en el código de detención (tenga en cuenta que aparecerá una descripción de la detención cuando se haga clic en él).

Inactivo es una casilla que, cuando está activada, desactivará la ejecución del código de detención del comprobador.

La gravedad determina cómo se debe marcar la detención del comprobador:

  • Ignore
  • Information
  • Advertencia
  • Error

El informe de errores determina cómo desea que se notifique o registre el comprobador específico:

Iniciar sesión en archivo: una casilla que, cuando se selecciona, se registrará en el archivo designado.

Seguimiento de la pila de registros: una casilla que, cuando esté seleccionada, registrará los seguimientos de la pila cuando estén disponibles.

Sin interrupción: una opción para no interrumpir en el depurador.

Excepción: una opción junto con ningún punto de interrupción y punto de interrupción

Punto de interrupción: una opción junto con ninguna interrupción o excepción.

Varios proporciona dos opciones

Detener una vez: una casilla que cuando esté activada solo se detendrá en ese error una vez al probar una aplicación.

No continuable: una casilla que cuando esté activada no le permitirá continuar sin investigar.

Consulte también

Comprobador de aplicaciones: información general

Comprobador de aplicaciones: características

Comprobador de aplicaciones: pruebas dentro del comprobador de aplicaciones

Comprobador de aplicaciones: códigos y definiciones de detención

Comprobador de aplicaciones: se detiene la depuración del comprobador de aplicaciones

Comprobador de aplicaciones: preguntas más frecuentes