2010-03-31 13 views
5

Descargo Application Verifier 4.0 para probar mi aplicación para verificar si podría haber problemas en Vista/7.¿Cómo probar una aplicación Delphi con Application Verifier 4.0?

Ejecutar desde depurador Delphi 2010 y detenerme en la vista de CPU. Obviamente, ¡no entiendo nada sobre el ensamblador !.

Por lo tanto, intento ejecutar directamente desde el explorador de Windows, y la aplicación muere.

(De hecho, no entiendo bien qué es exactamente lo que hará App Verifier: espero algún tipo de mensaje amigable).

Esto es lo que sale:

7C81A3E2 C3    ret 
7C81A3E3 90    nop 
7C81A3E4 8BFF    mov edi,edi 
ntdll.DbgUserBreakPoint: 
7C81A3E6 CC    int 3 
7C81A3E7 C3    ret 
7C81A3E8 8BFF    mov edi,edi 
7C81A3EA 8B442404   mov eax,[esp+$04] 
7C81A3EE CC    int 3 
7C81A3EF C20400   ret $0004 
ntdll.NtCurrentTeb: 
7C81A3F2 64A118000000  mov eax, fs:[$00000018] 
7C81A3F8 C3    ret 
ntdll.RtlInitString: 
7C81A3F9 57    push edi 

Carga:

:7c81a3e2 ntdll.DbgBreakPoint + 0x1 
:10003b68 ; C:\WINDOWS\system32\vrfcore.dll 
:00396a9d ; C:\WINDOWS\system32\vfbasics.dll 
:00397316 ; C:\WINDOWS\system32\vfbasics.dll 
:7c84bcdb ; ntdll.dll 
:7c8316f8 ; ntdll.dll 
:7c83154f ; ntdll.dll 
:7c82855e ntdll.KiUserExceptionDispatcher + 0xe 
:0040aa00 GetUILanguages + $80 
:0040b298 GetResourceModuleName + $124 
:0040afde LoadResourceModule + $7A 
:0040a134 DelayLoadResourceModule + $2C 
:00406c40 @StartExe + $44 
:77e6f23b ; C:\WINDOWS\system32\KERNEL32.dll 

Respuesta

0

He intentado varias combinaciones de la aplicación verificador, el otro día.
La versión de 32 bits siguió fallando. Luego, después de leer un poco de la documentación, descubrí que no tiene sentido ejecutar la versión de 32 bits porque a Microsoft solo le interesan los resultados de la prueba de 64 bits. Los 32 bits son solo para su propia referencia (¡y no funcionan!).
Así que dejé mi máquina virtual Win7 de 32 bits y creé una máquina virtual Win 7 de 64 bits, instalé el verificador de aplicaciones de 64 bits, leí el README (un paso inusual para los programadores que te concedo :-)), y luego imprimí el archivo README porque es confuso! Después de eso, sigue las instrucciones e instala/ejecuta tu aplicación de 32 bits en el sistema operativo de 64 bits. Funciona bien
... y luego vas a corregir las advertencias del informe del verificador de la aplicación.

+1

Lo siento. Me acabo de dar cuenta de que AppVerifier y el programa de logotipo de Windows 7 son bestias ligeramente diferentes. El software del programa de logotipo instala el AppVerifier pero lo usa de una manera diferente. – shunty

5

Application Verifier es un envoltorio de GUI alrededor de una gran cantidad de configuraciones de registro.

Cuando agrega su aplicación al Verificador de aplicación, le dice a Windows que realice más comprobaciones cuando se está ejecutando su aplicación.

Después de que haya agregado su aplicación, puede cerrar Application Verifier; la configuración está guardada

Ahora, cada vez que ejecute su aplicación, Windows hará una verificación adicional para diversas condiciones (como se especifica a través del Verificador de aplicación).

Algunas de las comprobaciones darán como resultado la invocación de DebugBreak(). (Esta es la razón por la cual su aplicación muere cuando la ejecuta en Windows Explorer.)

Debe ejecutar la aplicación bajo un depurador para que pueda ver dónde ocurren los problemas.

Sé muy poco sobre Delphi 2010; si está creando código administrado, puede tener problemas, ya que los puntos de interrupción se producirán en el código nativo, y su depurador (el depurador de Delphi) necesitaría poder depurar el código mixto nativo/administrado.

0

No tengo experiencia con AppVerifier, pero KiUserExceptionDispatcher es el manejador de excepciones. Hubo una excepción en su aplicación, la pila de llamadas lo indica. Probablemente sea por eso que el sistema operativo lo detiene en el depurador.

Creo que se supone que debes analizar por qué hubo una excepción aquí y deshacerte de ella.

0

AppVerified genera archivos de registro que puede ver desde AppVerifier. Si su aplicación se bloquea, intente desactivar algunas de las comprobaciones de AppVerifier para encontrar al culpable.

0

Ejecutando a través del depurador Delphi, por lo general (posiblemente siempre) se detendrá en la vista de CPU cuando ocurra un problema en el comprobador de aplicaciones. Esto se debe a que las instrucciones reales de la máquina que desencadenaron el problema están más arriba en la pila de llamadas de la línea de código que lo activó indirectamente.

La solución es (por lo general) simple:
Abra su ventana de pila de llamadas, y mire hacia abajo en la lista de puntos de entrada hasta que encuentre el código familiar.

El único momento hasta ahora que no he encontrado que esto funcione también; es cuando su aplicación se está apagando y ha avanzado más allá de cierto punto en el proceso de apagado. Es decir. El 'post-end-of-application-cleanup': descarga de unidades, descarga de archivos DLL vinculados estáticamente, liberación de memoria del administrador de memoria, descarga del administrador de memoria.

1

Puede usarlo con windbg para depurar la aplicación. Y vaya a la ayuda de Application Verifier, encontrará todos los comandos, cómo depurar la aplicación y cómo obtener los detalles del error.

Cuestiones relacionadas