Как протестировать приложение Delphi с Application Verifier 4.0? - PullRequest
5 голосов
/ 31 марта 2010

Я загружаю Application Verifier 4.0, чтобы проверить мое приложение на наличие проблем в Vista / 7.

Я запускаюсь из отладчика Delphi 2010 и останавливаюсь в режиме CPU.Очевидно, я ничего не понимаю в ассемблере!.

Итак, я пытаюсь запустить прямо из проводника Windows, и приложение умирает.

(На самом деле, я плохо понимаючто именно будет делать 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

Ответы [ 6 ]

5 голосов
/ 27 апреля 2010

Application Verifier - это оболочка с графическим интерфейсом для настройки параметров реестра.

Когда вы добавляете свое приложение в Application Verifier, оно сообщает Windows, что нужно больше проверять, когда ваше приложение работает.

После добавления приложения вы можете закрыть Application Verifier; настройки сохранены.

Теперь, каждый раз, когда вы запускаете ваше приложение, Windows будет выполнять дополнительную проверку для различных условий (как указано в Application Verifier).

Некоторые проверки приведут к вызову DebugBreak (). (Вот почему ваше приложение умирает, когда вы запускаете его в Windows Explorer.)

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

Я очень мало знаю о Delphi 2010; если он создает управляемый код, у вас могут возникнуть проблемы, так как точки останова будут возникать в нативном коде, и ваш отладчик (отладчик Delphi) должен иметь возможность отлаживать смешанный нативный / управляемый код.

1 голос
/ 26 марта 2012

Вы можете использовать его с windbg для отладки приложения. И перейдите к справке Application Verifier, вы найдете все команды, как отлаживать приложение и как получить подробную информацию об ошибке.

0 голосов
/ 19 июля 2011

Работая через отладчик Delphi, вы обычно (возможно, всегда) останавливаетесь в CPU View при возникновении проблем с App Verifier. Это связано с тем, что фактические машинные инструкции, которые вызвали проблему, находятся выше в стеке вызовов по сравнению с вашей строкой кода, которая косвенно вызвала ее.

Решение (обычно) простое:
Откройте окно стека вызовов и просматривайте список точек входа, пока не найдете знакомый код.

Единственный раз, когда я не нашел, чтобы это работало также; это когда ваше приложение закрывается и выходит за пределы определенной точки в процессе завершения работы. То есть 'Post-end-of-application-cleanup': выгрузка модулей, выгрузка статически связанных DLL, освобождение памяти из менеджера памяти, выгрузка менеджера памяти.

0 голосов
/ 27 апреля 2010

AppVerified генерирует файлы журнала, которые вы можете просматривать из самого AppVerifier. Если ваше приложение дает сбой, попробуйте отключить некоторые проверки AppVerifier, чтобы найти виновника.

0 голосов
/ 27 апреля 2010

У меня нет опыта работы с AppVerifier, но KiUserExceptionDispatcher является обработчиком исключений. В вашем приложении произошла исключительная ситуация - стек вызовов указывает на это. Вероятно, поэтому ОС останавливает вас в отладчике.

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

0 голосов
/ 07 апреля 2010

На днях я попробовал различные комбинации верификатора приложения.
32-битная версия просто продолжала падать. Затем, прочитав немного документации, я обнаружил, что запускать 32-разрядную версию в любом случае не имеет смысла, потому что Microsoft интересует только результаты 64-разрядного теста. 32-разрядный только для справки (и не работает!).
Поэтому я сбросил свою 32-битную виртуальную машину Win7 и создал 64-битную виртуальную машину Win 7, установил 64-битный верификатор приложений, прочитал README (необычный шаг для нас, программистов, я даю вам :-)), затем распечатал README, это сбивает с толку! После этого вы следуете инструкциям и устанавливаете / запускаете 32-битное приложение под 64-битной ОС. Работает нормально
... и затем исправьте все предупреждения из отчета о проверке приложения.

...