2010-03-31 8 views
5

Vista/7에서 문제가있을 수있는 경우 응용 프로그램 검증기 4.0을 다운로드하여 내 응용 프로그램을 검사합니다.Application Verifier 4.0을 사용하여 Delphi 응용 프로그램을 테스트하는 방법은 무엇입니까?

나는 Delphi 2010 디버거에서 실행하고 CPU보기에서 멈 춥니 다. 분명히, 나는 어셈블러에 대해 아무것도 이해하지 못한다!.

그래서 Windows 탐색기와 App에서 직접 실행 해 봅니다.

(사실, 정확히 무엇이 App Verifier를 수행 할 것인지 잘 이해하지 못합니다. 나는 친절한 메시지를 기대합니다.)

이 내가 무엇을 얻을 수 있습니다 :

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 

로드 :

: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 

답변

0

내가 다른 일 응용 프로그램 검증의 다양한 조합을 시도했다.
32 비트 버전이 계속 충돌합니다. 그런 다음 약간의 설명서를 읽은 후 Microsoft는 64 비트 테스트의 결과에만 관심이 있기 때문에 32 비트 버전을 실행하는 데 아무런 의미가 없음을 발견했습니다. 32 비트는 참고 용으로 만 제공됩니다 (작동하지 않습니다!).
32 비트 Win7 가상 머신을 덤프하고 64 비트 Win 7 VM을 생성하고 64 비트 응용 프로그램 검증 프로그램을 설치하고 README를 읽은 다음 (프로그래머에게 나는 :-) 부여한 README 파일을 읽음) 혼란 스럽기 때문에! 그런 다음 프롬프트를 따라 64 비트 OS 아래에 32 비트 응용 프로그램을 설치/실행합니다. 잘 작동
... 그리고 당신은 응용 프로그램 검증 보고서에서 모든 경고를 고쳐갑니다.

+1

죄송합니다. AppVerifier와 Windows 7 로고 프로그램은 약간 다른 짐승임을 깨달았습니다. 로고 프로그램 소프트웨어는 AppVerifier를 설치하지만 다른 방식으로 사용합니다. – shunty

5

Application Verifier는 일련의 레지스트리 설정을 둘러싼 GUI 래퍼입니다.

응용 프로그램을 Application Verifier에 추가하면 응용 프로그램이 실행 중일 때 Windows에서 더 많은 검사를 수행하도록 지시합니다.

응용 프로그램을 추가 한 후에는 응용 프로그램 검증자를 닫을 수 있습니다. 설정이 저장됩니다.

이제 응용 프로그램을 실행할 때마다 Windows는 Application Verifier를 통해 지정된대로 다양한 조건에 대해 추가 검사를 수행합니다.

일부 검사는 DebugBreak()가 호출되도록합니다. Windows 탐색기에서 실행할 때 응용 프로그램이 종료되는 이유입니다.

문제가 발생한 위치를 볼 수 있도록 응용 프로그램을 디버거에서 실행해야합니다.

저는 Delphi 2010에 대해 거의 알지 못합니다. 네이티브 코드에서 중단 점이 발생하고 디버거 (Delphi의 디버거)가 혼합 된 네이티브/관리 코드를 디버깅 할 수 있어야하므로 관리되는 코드를 만드는 경우 문제가 발생할 수 있습니다.

0

나는 AppVerifier와는 아무런 관련이 없지만, KiUserExceptionDispatcher는 예외 처리기 호출자입니다. 응용 프로그램에서 예외가 발생했습니다. 호출 스택이이를 나타냅니다. 이것이 OS가 디버거에서 멈추는 이유입니다.

여기 왜 예외가 있었는지 분석하고 그걸 없애야한다고 생각합니다.

0

AppVerified는 AppVerifier 자체에서 볼 수있는 로그 파일을 생성합니다. 앱이 충돌하는 경우 AppVerifier 검사 중 일부를 사용 중지하여 범인을 찾으십시오.

0

Delphi 디버거를 통해 실행하면 일반적으로 App Verifier 문제가 발생할 때 CPU보기에서 중지됩니다. 이것은 문제를 일으킨 실제 기계 명령어가 간접적으로 트리거 한 코드 라인의 호출 스택에서 더 높기 때문입니다.

해결책은 (보통) 간단합니다.
호출 스택 창을 열고 익숙한 코드를 찾을 때까지 진입 점 목록을 살펴보십시오.

지금까지 단 한 건도 잘 작동하지 않았습니다. 응용 프로그램이 종료 될 때 종료 프로세스의 특정 지점을 넘어 진행되었습니다. 나는. 'post-end-of-application-cleanup': 유닛을 언로드하고, 정적으로 링크 된 DLL을 언로드하고, 메모리 관리자로부터 메모리를 해제하고, 메모리 관리자를 언로드합니다.

1

응용 프로그램을 디버깅하려면 windbg과 함께 사용할 수 있습니다. Application Verifier의 도움으로 가서 모든 명령을 디버그하는 방법과 오류의 세부 정보를 얻는 방법을 찾을 수 있습니다.

관련 문제