2010-03-31 18 views
5

Tôi tải xuống Trình xác minh ứng dụng 4.0 để kiểm tra ứng dụng của mình để kiểm tra xem có thể gặp sự cố trên Vista/7 hay không.Cách thử nghiệm ứng dụng Delphi với ứng dụng Verifier 4.0?

Tôi chạy từ trình gỡ lỗi Delphi 2010 và dừng trong chế độ xem CPU. Rõ ràng, tôi không hiểu bất cứ điều gì về lắp ráp !.

Vì vậy, tôi thử chạy trực tiếp từ trình khám phá cửa sổ và ứng dụng sẽ chết.

(Trong thực tế, tôi không hiểu chính xác những gì sẽ làm App Verifier: Tôi mong đợi một số loại thông điệp thân thiện).

Đây là những gì tôi nhận được:

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 

Chở Hàng:

: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 

Trả lời

0

tôi đã cố gắng kết hợp khác nhau của người xác minh ứng dụng các ngày khác.
Phiên bản 32 bit chỉ bị treo. Sau đó, khi đọc một chút tài liệu, tôi thấy rằng không có điểm nào trong việc chạy phiên bản 32 bit vì Microsoft chỉ quan tâm đến kết quả của thử nghiệm 64 bit. 32 bit chỉ dành cho tham khảo của bạn (và không hoạt động!).
Vì vậy, tôi đã bỏ máy ảo Win7 32 bit của mình và tạo ra một máy ảo Win 7 64 bit, cài đặt trình kiểm tra ứng dụng 64 bit, đọc README (một bước khác thường đối với những lập trình viên tôi cấp cho bạn :-)), sau đó in ra README 'cos nó khó hiểu! Sau đó, bạn làm theo lời nhắc và cài đặt/chạy ứng dụng 32 bit của bạn trong hệ điều hành 64 bit. Hoạt động tốt
... và sau đó bạn sửa bất kỳ cảnh báo nào từ báo cáo xác minh ứng dụng.

+1

Rất tiếc. Chỉ cần nhận ra rằng AppVerifier và Windows 7 biểu tượng công cụ là những con thú hơi khác nhau. Phần mềm chương trình logo cài đặt AppVerifier nhưng sử dụng nó theo một cách khác. – shunty

5

Trình xác minh ứng dụng là trình bao bọc GUI xung quanh một loạt cài đặt đăng ký.

Khi bạn thêm ứng dụng của mình vào Trình xác minh ứng dụng, nó sẽ yêu cầu Windows kiểm tra nhiều hơn khi ứng dụng của bạn đang chạy.

Sau khi bạn đã thêm ứng dụng của mình, bạn có thể đóng Trình xác minh ứng dụng; các cài đặt được lưu.

Bây giờ, bất cứ khi nào bạn chạy ứng dụng của mình, Windows sẽ kiểm tra thêm các điều kiện khác nhau (như được chỉ định qua Trình xác minh ứng dụng).

Một số séc sẽ dẫn đến DebugBreak() được gọi. (Đây là lý do tại sao ứng dụng của bạn chết khi bạn chạy nó trong Windows Explorer.)

Bạn phải chạy ứng dụng của bạn dưới trình gỡ lỗi để bạn có thể thấy nơi xảy ra sự cố.

Tôi biết rất ít về Delphi 2010; nếu tạo mã được quản lý, bạn có thể gặp sự cố, vì điểm ngắt sẽ xuất hiện trong mã gốc và trình gỡ lỗi của bạn (trình gỡ rối của Delphi) sẽ cần có khả năng gỡ lỗi mã gốc/được quản lý hỗn hợp.

0

Tôi không có expierence với AppVerifier, nhưng KiUserExceptionDispatcher là người xử lý ngoại lệ người gọi. Có ngoại lệ trong ứng dụng của bạn - ngăn xếp cuộc gọi cho biết điều đó. Đó có thể là lý do tại sao hệ điều hành dừng bạn tại trình gỡ lỗi.

Tôi nghĩ rằng bạn phải phân tích lý do tại sao có một ngoại lệ ở đây và loại bỏ nó.

0

AppVerified tạo tệp nhật ký mà bạn có thể xem từ bên trong AppVerifier. Nếu ứng dụng của bạn gặp sự cố, hãy thử tắt một số kiểm tra AppVerifier để tìm thủ phạm.

0

Chạy qua trình gỡ rối Delphi, bạn thường sẽ (có thể luôn luôn) dừng trong Chế độ xem CPU khi xảy ra sự cố Trình xác minh ứng dụng. Điều này là do các lệnh máy thực tế đã kích hoạt vấn đề cao hơn trong ngăn xếp cuộc gọi từ dòng mã của bạn đã gián tiếp kích hoạt nó.

Giải pháp là (thường) đơn giản:
Mở cửa sổ ngăn xếp cuộc gọi và xem danh sách các điểm nhập cho đến khi bạn tìm thấy mã quen thuộc.

Thời gian duy nhất cho đến thời điểm này tôi chưa tìm thấy điều này để hoạt động; là khi ứng dụng của bạn tắt và đã tiến hành vượt quá một điểm nhất định trong quá trình tắt máy. I E. Các 'cuối-of-ứng dụng-dọn dẹp': dỡ đơn vị, dỡ bỏ DLL liên kết tĩnh, giải phóng bộ nhớ từ bộ quản lý bộ nhớ, dỡ bộ quản lý bộ nhớ.

1

Bạn có thể sử dụng nó với windbg để gỡ lỗi ứng dụng. Và đi đến sự giúp đỡ của ứng dụng Verifier, bạn sẽ tìm thấy tất cả các lệnh làm thế nào để gỡ lỗi các ứng dụng và làm thế nào để có được các chi tiết của lỗi.

Các vấn đề liên quan