2010-03-31 55 views
5

我下載了Application Verifier 4.0來測試我的應用程序,檢查是否可能在Vista/7上出現問題。如何使用Application Verifier 4.0測試Delphi應用程序?

我從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 

回答

0

我試過的應用驗證的各種組合的一天。
32位版本剛剛崩潰。然後,在閱讀了一些文檔後,我發現無論如何,運行32位版本都沒有意義,因爲微軟只對64位測試的結果感興趣。 32位僅供您自己參考(並且不起作用!)。
所以我甩掉了我的32位Win7虛擬機,並創建了一個64位的Win 7虛擬機,安裝了64位應用驗證器,閱讀README(我向我們授予您的程序員的一個不尋常的步驟:-)),然後打印出自述文件'因爲它很混亂!之後,按照提示進行操作,並在64位操作系統下安裝/運行32位應用程序。正常工作
...然後您可以修復應用驗證器報告中的任何警告。

+1

對不起。剛剛意識到AppVerifier和Windows 7標誌程序的東西是稍有不同的野獸。徽標程序軟件安裝AppVerifier,但以不同的方式使用它。 – shunty 2010-04-09 07:35:29

5

應用程序驗證程序是圍繞一堆註冊表設置的GUI包裝。

將應用程序添加到Application Verifier時,它會告訴Windows在應用程序運行時執行更多檢查。

添加應用程序後,您可以關閉Application Verifier;設置被保存。

現在,無論您何時運行應用程序,Windows都會針對各種條件(通過應用程序驗證程序指定)進行額外檢查。

一些檢查將導致調用DebugBreak()。 (這就是您的應用程序在Windows資源管理器下運行時會死掉的原因。)

您必須在調試器下運行您的應用程序,以便您可以查看問題的發生位置。

我對Delphi 2010的瞭解甚少;如果它正在創建託管代碼,那麼您可能會遇到問題,因爲斷點將在本機代碼中發生,而您的調試器(Delphi的調試器)需要能夠調試混合的本機/託管代碼。

0

我沒有使用AppVerifier,但KiUserExceptionDispatcher是異常處理調用者。在你的應用程序中有個例外 - 調用堆棧表明。這可能就是爲什麼OS在調試器上阻止你。

我認爲你應該分析爲什麼這裏有一個例外,並擺脫它。

0

AppVerified生成可從AppVerifier自身內部查看的日誌文件。如果您的應用程序崩潰,請嘗試禁用某些AppVerifier檢查來查找罪魁禍首。

0

通過Delphi調試程序運行時,通常(可能總是)在發生App Verifier問題時停止在CPU View中。這是因爲引發問題的實際機器指令在間接觸發它的代碼行中的調用堆棧中較高。

解決方案是(通常)很簡單:
打開您的調用堆棧窗口,然後查看入口點列表,直到找到熟悉的代碼。

到目前爲止,我還沒有找到這個工作的唯一一次;是當您的應用程序正在關閉並且在關機過程中超出某個特定點時。即'應用程序後清理':卸載單元,卸載靜態鏈接的DLL,從內存管理器釋放內存,卸載內存管理器。

1

您可以將它與windbg一起用於調試應用程序。在Application Verifier的幫助下,您將找到如何調試應用程序的所有命令以及如何獲取錯誤的詳細信息。