Bagikan melalui


Pemverifikasi Aplikasi - Aplikasi Pengujian

Application Verifier (AppVerifier) adalah alat verifikasi runtime untuk kode tidak terkelola yang membantu menemukan kesalahan pemrograman yang halus, masalah keamanan, dan masalah hak istimewa akun pengguna terbatas yang dapat sulit diidentifikasi dengan teknik pengujian aplikasi normal.

Untuk memberikan aplikasi Windows yang andal:

  1. Aplikasi pengujian yang ditulis dalam kode yang tidak dikelola (asli) dengan Application Verifier di bawah debugger dan dengan tumpukan halaman penuh sebelum merilisnya kepada pelanggan.
  2. Ikuti langkah-langkah yang disediakan oleh Pemverifikasi Aplikasi untuk mengatasi kondisi yang salah.
  3. Setelah aplikasi Anda dirilis, pantau laporan kegagalan aplikasi yang dikumpulkan secara teratur, misalnya oleh Pelaporan Kesalahan Windows jika tersedia.

Pemeriksaan kumpulan utas diaktifkan secara default di bawah judul pemeriksaan "Dasar". Karena ini disertakan dalam pengaturan default, pengguna hanya perlu menjalankan Application Verifier pada kode mereka dengan pengaturan default untuk memanfaatkan ini dan pemeriksaan penting lainnya.

Mengonfigurasi Pemverifikasi Aplikasi

Penyiapan debugger

Aplikasi yang sedang diverifikasi harus berjalan di bawah debugger mode pengguna atau sistem harus berjalan di bawah debugger kernel karena akan masuk ke debugger ketika kesalahan terjadi. Lihat Pemverifikasi Aplikasi - Penelusuran Kesalahan Aplikasi Pemverifikasi Berhenti untuk detail debugger selengkapnya.

Pengaturan

Pemverifikasi Aplikasi tidak dapat diaktifkan untuk proses yang sedang berjalan. Akibatnya, Anda perlu membuat pengaturan seperti yang dijelaskan di bawah ini dan kemudian memulai aplikasi. Pengaturan terus-menerus hingga dihapus secara eksplisit. Oleh karena itu, berapa kali Anda meluncurkan aplikasi, aplikasi akan dimulai dengan AppVerifier diaktifkan sampai pengaturan dihapus.

Menggunakan Pengujian Dasar-Dasar Pemverifikasi Aplikasi

Skenario di bawah ini mengilustrasikan baris perintah dan opsi antarmuka pengguna yang direkomendasikan. Ini harus dijalankan selama semua pengujian yang menjalankan kode untuk memastikan cakupan lengkap. Harapan untuk skenario ini adalah bahwa aplikasi tidak masuk ke debugger dan semua pengujian lulus dengan laju pass yang sama seperti saat dijalankan tanpa AppVerifier diaktifkan.

Aktifkan pemverifikasi untuk aplikasi yang ingin Anda uji menggunakan. Dari baris perintah: appverif /verify MyApp.exe.

Dari antarmuka pengguna: Tambahkan aplikasi Anda dengan mengklik kanan di dalam area Aplikasi dan memilih Tambahkan Aplikasi. Pilih Dasar-Dasar dari area Pengujian. Klik tombol Simpan.

Catatan:

/verify akan mengaktifkan pengujian dasar

Jika Anda menguji DLL, Pemverifikasi Aplikasi harus diaktifkan untuk uji yang dapat dieksekusi yang menjalankan DLL.

Jalankan lapisan verifikasi secara terpisah. Misalnya, dalam satu sesi aktifkan semua Dasar dan di sesi lain mengaktifkan semua pemeriksaan LuaPriv.

Jalankan SEMUA pengujian Anda yang menjalankan aplikasi.

Analisis setiap pemutus debugger yang ditemui. Jika istirahat terjadi, Anda harus memahaminya dan memperbaikinya. CATATAN: Konten bantuan memberikan detail tentang jeda dan cara menyelidikinya.

Setelah selesai, hapus semua pengaturan. Dari baris perintah: appverif /n MyApp.exe.

Dari antarmuka pengguna, hapus aplikasi Anda dengan mengklik kanan di dalam area Aplikasi dan memilih Hapus Aplikasi. Lalu klik tombol Simpan.

Kerusakan Timbunan

Hampir 10% crash aplikasi pada sistem Windows disebabkan oleh kerusakan tumpukan. Crash ini hampir tidak mungkin untuk di-debug setelah fakta. Cara terbaik untuk menghindari masalah ini adalah dengan menguji dengan fitur Timbunan Halaman yang ditemukan di Pemverifikasi Aplikasi. Ada dua rasa Tumpuk Halaman: "Penuh" dan "Terang." Penuh adalah default; ini akan memaksa debugger berhenti seketika setelah mendeteksi kerusakan. Fitur ini HARUS dijalankan saat berada di bawah debugger. Namun, ini juga merupakan sumber daya yang paling menuntut. Jika pengguna mengalami masalah waktu dan telah menjalankan skenario di bawah Tumpukan Halaman "Penuh", mengaturnya ke "Cahaya" kemungkinan akan mengatasi masalah ini. Selain itu, Timbunan Halaman Ringan tidak mengalami crash hingga proses keluar. Ini memberikan jejak tumpukan ke alokasi, tetapi dapat memakan waktu jauh lebih lama untuk didiagnosis daripada memanfaatkan rekan penuhnya.

Menggunakan Simulasi Sumber Daya Rendah AppVerifier (injeksi kesalahan)

Harapan untuk skenario ini adalah bahwa aplikasi tidak masuk ke debugger. Dengan tidak masuk ke debugger berarti Anda tidak memiliki kesalahan yang perlu ditangani.

Tingkat lulus untuk pengujian dapat menurun secara signifikan karena injeksi kesalahan acak dimasukkan ke dalam operasi normal.

Aktifkan Simulasi Sumber Daya Rendah Pemverifikasi Aplikasi (injeksi kesalahan) untuk aplikasi. Dari baris perintah: Appverif /verify MyApp.exe /faults. Dari antarmuka pengguna: Tambahkan aplikasi Anda dengan mengklik kanan di dalam area Aplikasi dan memilih Tambahkan Aplikasi . Pilih Simulasi Sumber Daya Rendah dari area Pengujian. Klik tombol Simpan.

Catatan: Jika Anda menguji DLL, Anda dapat menerapkan simulasi sumber daya rendah (injeksi kesalahan) pada DLL tertentu alih-alih seluruh proses. Format baris perintah adalah:

appverif /verify TARGET [/faults [PROBABILITY [TIMEOUT [DLL …]]]]

Contoh:

appverif /verify mytest.exe /faults 50000 1000 d3d9.dll

Jalankan SEMUA pengujian Anda yang menjalankan aplikasi

Analisis setiap pemutus debugger yang ditemui. Jika istirahat terjadi, Anda harus memahaminya dan memperbaikinya.

Setelah selesai, hapus semua pengaturan. Dari baris perintah: appverif /n MyApp.exe. Dari antarmuka pengguna: hapus aplikasi Anda dengan mengklik kanan di dalam area Aplikasi dan memilih Hapus Aplikasi , mengklik tombol Simpan.

Catatan: Menjalankan dengan dan tanpa latihan injeksi kesalahan sebagian besar jalur kode yang berbeda dalam aplikasi dan oleh karena itu kedua skenario harus dijalankan untuk mendapatkan manfaat penuh AppVerifier.

Menggunakan Pemverifikasi Aplikasi dengan WOW64

Anda dapat menggunakan Verifier Aplikasi versi 32-bit atau versi 64-bit untuk memverifikasi aplikasi 32-bit yang berjalan di bawah WOW64.

Menganalisis Data AppVerifier

Semua data yang dibuat selama analisis AppVerifier disimpan di folder %USERPROFILE%\AppVerifierLogs dalam format biner. Log ini kemudian dapat dikonversi ke XML melalui antarmuka pengguna atau baris perintah untuk analisis lebih lanjut.

Untuk menampilkan file XML, Anda bisa menggunakan alat apa pun untuk menampilkan XML, misalnya mengimpor ke Microsoft Excel - Mengimpor file XML ke Excel dan menggunakan filter atau Tabel Pivot untuk mengatur ulang dan menganalisis data yang dikumpulkan.

Menggunakan Baris Perintah

Pemverifikasi Aplikasi dapat digunakan melalui UI atau dengan menggunakan opsi baris perintah.

Berikut adalah contoh cara menggunakan baris perintah (di bawah ini adalah detailnya):

appverif /verify TARGET [/faults [PROBABILITY [TIMEOUT [DLL …]]]]

appverif /verify notepad

appverif -enable LAYER … -for TARGET ... [-with [LAYER].PROPERTY=[VALUE] …] 

appverif -disable LAYER ... -for TARGET ...

appverif -query LAYER ... -for TARGET ...

appverif –configure STOP ... -for TARGET ... [-with STOPPROPERTY=[VALUE] …]

appverif –logtofile {enable|disable}

Untuk mengaktifkan Pemverifikasi Aplikasi untuk lapisan verifikasi tertentu untuk dua aplikasi:

appverif –enable Heaps Locks –for notepad.exe iexplore.exe

Untuk mengaktifkan dua lapisan bernama X dan Y untuk test.exe target dengan properti X.DebugLevel dan Y.DebugLevel:

appverif –enable X Y –for test.exe –with X.DebugLevel=1 Y.DebugLevel=2

Untuk menonaktifkan semua pemeriksaan yang dijalankan pada aplikasi:

appverif -disable * -for notepad.exe

ATAU

appverif -delete settings -for notepad.exe

Untuk mengaktifkan atau menonaktifkan pengelogan Pemverifikasi Aplikasi secara global untuk semua proses:

appverif –logtofile enable

appverif –logtofile disable

Pengelogan diaktifkan secara default untuk semua proses.

Sintaks Baris Perintah Pemverifikasi Aplikasi

Penggunaan Baris Perintah Pemverifikasi Aplikasi:

-enable TEST ... -for TARGET ... [-with [TEST.]PROPERTY=VALUE ...]
-disable TEST ... -for TARGET ...
-query TEST ... -for TARGET ...
-configure STOP ... -for TARGET ... -with PROPERTY=VALUE...
-verify TARGET [-faults [PROBABILITY [TIMEOUT [DLL ...]]]]
-export log -for TARGET -with To=XML_FILE [Symbols=SYMBOL_PATH] [StampFrom=LOG_STAMP] [StampTo=LOG_STAMP] [Log=RELATIVE_TO_LAST_INDEX]
-delete {logs|settings} -for TARGET ...
-stamp log -for TARGET -with Stamp=LOG_STAMP [Log=RELATIVE_TO_LAST_INDEX]
-logtoxml LOGFILE XMLFILE
-installprovider PROVIDERBINARY
-sppath [PROTECTED_PROCESS_LOG_PATH]
-cppath
-logtofile [enable | disable]

Sintaks baris perintah menerima satu atau beberapa lapisan dan menerapkannya ke satu atau beberapa target dengan penentu properti opsional untuk lapisan.

appverif -enable LAYER ... -for TARGET ... [-with [LAYER].PROPERTY=[VALUE] …] appverif -disable LAYER ... -for TARGET ... appverif -query LAYER ... -for TARGET ... appverif –configure STOP ... -for TARGET ... [-with STOPPROPERTY=[VALUE] …]

di mana:

LAYER adalah nama standar untuk lapisan verifikasi. Jika penyedia pemverifikasi baru diinstal, maka ini akan mengekspos nama lapisan verifikasi baru yang akan digunakan di baris perintah. Contoh lapisan adalah Heap, Handles atau Locks.

Anda dapat mengatur LAYER ke * untuk menentukan bahwa perintah berlaku untuk semua lapisan.

TARGET adalah nama biner (misalnya notepad.exe). Ini adalah pengaturan statis yang bertahan di registri dan akan dipertimbangkan setiap kali aplikasi dimulai. Untuk perintah appverif –disable, Anda dapat mengatur TARGET ke * untuk menentukan bahwa semua target harus dinonaktifkan.

PROPERTY adalah nama properti khusus untuk LAYER yang disebutkan dalam baris perintah. Misalnya, lapisan Handles memiliki jejak sebagai properti.

VALUE adalah nilai untuk properti . Jenis nilai tergantung pada jenis yang terkait dengan properti dan akan diberlakukan. Jenis yang didukung untuk saat ini adalah: boolean (true/false), bilangan bulat (desimal/oktal/hex dalam notasi C), string dan multi-string (berisi \0’ between strings and being terminated by \0\0'). Jika VALUE tidak ditentukan, itu berarti pengguna ingin menghapus properti tersebut dan mengembalikan perilaku ke nilai default untuk properti .

STOP adalah angka (desimal atau heks dalam notasi C) dari masalah penghentian pemverifikasi yang akan dikonfigurasi. Kode berhenti harus unik (tidak ada dua lapisan yang dapat menggunakan kode berhenti yang sama oleh karena itu alat itu sendiri akan menentukan lapisan apa yang dimiliki stop)

STOPPROPERTY adalah nama properti yang dapat diterima untuk pemberhentian pemverifikasi. Jika nilai tidak ditentukan, diasumsikan properti harus dihapus. Properti yang diizinkan untuk berhenti adalah (Lihat Mengonfigurasi Penghentian Pemverifikasi di bawah ini untuk detail selengkapnya):

  • Laporan Kesalahan
  • Tingkat keparahan
  • Rasa

Properti dapat secara opsional memenuhi syarat oleh lapisan tempat properti tersebut berada. Namun, ini tidak diperlukan jika baris perintah hanya mengaktifkan satu lapisan. Misalnya, untuk mengaktifkan dua lapisan bernama X dan Y untuk test.exe target dengan properti X.DebugLevel dan Y.DebugLevel, perintahnya adalah:

appverif –enable X Y –for test.exe –with X.DebugLevel=1 Y.DebugLevel=2

Namun jika lapisan X diaktifkan, maka nama properti yang tidak memenuhi syarat dapat digunakan:

appverif –enable X –for test.exe –with DebugLevel=1

Karakter pemisah antara nama properti dan nilai dapat = (tanda sama dengan) atau : (titik dua).

Perintah lain-lain

appverif –query providers

appverif –delete logs –for TARGET ...

appverif –delete settings –for TARGET ...

Bersihkan target sepenuhnya dari registri.

appverif –stamp log –for Target –with Stamp=”LOG_STAMP”[Log= RELATIVE_TO_LAST_INDEX]

Perintah ini akan memberi stempel log dengan LOG_STAMP. Stempel ini berguna untuk mengidentifikasi hanya bagian log yang relevan saat melihat log dalam formulir XML.

appverif –export log –for TARGET –with To=XML_FILE[Symbols=SYMBOL_PATH][Stamp=LOG_STAMP][StampTo=LOG_STAMP][Log=RELATIVE_TO_LAST_INDEX]

Perintah di atas akan mengekspor log biner ke file xml. Properti Stempel opsional digunakan untuk mengidentifikasi bagian log mana yang harus diekspor ke XML. Jika tidak ditentukan maka seluruh log akan dikonversi. Properti Log memiliki nilai bilangan bulat negatif dan menandakan file log apa yang harus dikonversi mulai dari yang terakhir (diasumsikan jika properti tidak ada). Misalnya, luncurkan notepad.exe tiga kali berturut-turut. Untuk mengakses log pertama yang dibuat, tentukan Log=-2 di baris perintah.

Pintasan untuk Baris Perintah

Berikut ini adalah pintasan:

appverif /verify TARGET [/faults [PROBABILITY [TIMEOUT [DLL …]]]]

di mana:

TARGET memiliki arti yang sama seperti yang dijelaskan di atas.

PROBABILITAS adalah kemungkinan untuk menyuntikkan kesalahan. Harus berupa nilai dalam rentang 0..1000000. Jika tidak ditentukan, nilai defaultnya adalah 5%.

TIMEOUT adalah interval waktu dalam milidetik selama startup proses ketika injeksi kesalahan tidak terjadi. Ini dilakukan untuk memungkinkan proses memulai dengan benar sebelum kesalahan terjadi. Jika tidak ditentukan, nilainya adalah 500 msecs.

DLL adalah nama modul yang dimuat dalam proses. Biasanya ini adalah nama pustaka dinamis (ekstensi .dll) tetapi dapat berupa ActiveX (ekstensi .ocx) atau beberapa modul lain yang dapat dimuat.

Contoh:

appverif /verify notepad.exe /faults 100000 1000 msvcrt.dll

Aktifkan injeksi kesalahan untuk notepad.exe (setiap kali akan diluncurkan). Kesalahan harus terjadi dengan probabilitas 10%, hanya 1000 msecs setelah proses diluncurkan dan hanya untuk operasi yang dimulai dari msvcrt.dll.

Mengaktifkan detail Injeksi Kesalahan

Menggunakan baris perintah /faults akan mengaktifkan injeksi kesalahan hanya untuk OLE_ALLOC dan HEAP_ALLOC. Namun, Anda dapat menggunakan baris perintah untuk mengonfigurasi jenis injeksi kesalahan mana yang ingin Anda aktifkan. Misalnya, jika Anda ingin menyuntikkan kesalahan ke dalam registri atau API file sebagai 2%, gunakan baris perintah:

appverif -enable lowres -for hello.exe -with registry=20000 file=20000

Berikut adalah contoh lain:

appverif -query lowres -for hello.exe

Settings for hello.exe:
Test [lowres] enabled.

Include = *
Exclude =
TimeOut = 2000 (0x7D0)
WAIT = 0 (0x0)
HEAP_ALLOC = 20000 (0x4E20)
VIRTUAL_ALLOC = 0 (0x0)
REGISTRY = 20000 (0x4E20)
FILE = 20000 (0x4E20)
EVENT = 0 (0x0)
MAP_VIEW = 0 (0x0)
OLE_ALLOC = 20000 (0x4E20)
STACKS = false

Mengonfigurasi Penghentian Pemverifikasi

Menggunakan baris perintah (atau antarmuka pengguna) Anda dapat mengonfigurasi penghentian pemverifikasi. Berikut ini adalah contoh untuk memanfaatkan:

Appverif -configure STOP ... -for TARGET ... -with PROPERTY=VALUE ...

STOP adalah kode stop seperti 0x200 0x201

TARGET adalah nama aplikasi seperti foo.exe

PROPERTY dapat menjadi salah satu dari "ErrorReport", "Severity", dan "Flavor"

Untuk ErrorReport , VALUE bisa menjadi kombinasi dari nilai berikut.

0x00000001 berarti pemberhentian aktif. (Jika bit ini nol, itu berarti berhenti dinonaktifkan)

0x00000020 berarti berhenti akan masuk ke debugger menggunakan titik henti.

0x00000040 berarti berhenti masuk ke debugger dengan menghasilkan Pengecualian Pemverifikasi.

0x00000080 berarti perhentian akan dicatat dalam file log.

0x00000100 berarti pelacakan tumpukan untuk perhentian ini akan dicatat dalam file log.

Untuk Tingkat Keparahan, VALUE bisa menjadi salah satu dari berikut ini.

0x00000003 Perhentian informatif.

peringatan 0x0000000F.

0x0000003F Kesalahan.

Untuk Flavor , Nilai bisa menjadi kombinasi dari nilai berikut.

0x00000002 Perhentian yang tidak dapat dilanjutkan.

0x00000010 Perhentian ini hanya akan muncul satu kali. Ini akan diabaikan waktu berikut dalam eksekusi pengujian.

Misalnya, nonaktifkan 0x2700 berhenti, 0x2701 untuk foo.exe

Appverif –configure 0x2700 0x2701 –for foo.exe –with ErrorReport=0

Mengonfigurasi kode berhenti 0x2700 sebagai memecah debugger (secara default), menyimpan log tanpa jejak tumpukan, dan membuatnya tidak dapat dilanjutkan

Appverif –configure 0x2700 –for foo.exe –with ErrorReport=0xA1 Flavor=0x2

Opsi Penghentian Pemverifikasi - Pengaturan Tingkat Lanjut

Pemverifikasi Aplikasi memiliki pengaturan tingkat lanjut, seperti Tidak Aktif, yang dapat Anda ubah per penghentian pemverifikasi.

Opsi Penghentian Pemverifikasi Akses - Opsi penghentian pemverifikasi diubah pada dialog yang mencantumkan opsi yang tersedia. Untuk mengakses opsi penghentian pemverifikasi:

  1. Pilih nama pengujian di panel Pengujian.
  2. Pada menu Edit, pilih Opsi Hentikan Pemverifikasi atau Klik kanan pengujian dan pilih Opsi Berhenti Pemverifikasi.

Opsi Berhenti Pemverifikasi

Anda dapat mengubah elemen berikut per pemverifikasi berhenti tercantum dengan mengklik kode berhenti (perhatikan bahwa deskripsi perhentian akan muncul saat diklik).

Tidak aktif adalah kotak centang yang ketika dipilih akan menonaktifkan kode penghentian pemverifikasi agar tidak dijalankan.

Tingkat keparahan menentukan bagaimana penghentian pemverifikasi harus ditandai:

  • Mengabaikan
  • Informasi
  • Peringatan
  • Kesalahan

Pelaporan Kesalahan menentukan bagaimana Anda ingin pemverifikasi tertentu berhenti dilaporkan/dicatat:

Masuk ke File - kotak centang yang ketika dipilih akan masuk ke file yang ditunjuk.

Log Stack Trace - kotak centang yang ketika dipilih akan mencatat jejak tumpukan saat tersedia.

No Break - opsi untuk tidak melanggar debugger.

Pengecualian - opsi bersama tanpa jeda dan titik henti

Titik henti - opsi bersama tanpa jeda atau pengecualian.

Lain-lain menyediakan dua opsi

Hentikan Sekali - kotak centang yang ketika dipilih hanya akan berhenti pada kesalahan tersebut sekali saat menguji aplikasi.

Tidak Dapat Dilanjutkan - kotak centang yang ketika dipilih tidak akan memungkinkan Anda untuk melanjutkan tanpa menyelidiki.

Lihat Juga

Pemverifikasi Aplikasi - Gambaran Umum

Pemverifikasi Aplikasi - Fitur

Pemverifikasi Aplikasi - Pengujian dalam Pemverifikasi Aplikasi

Pemverifikasi Aplikasi - Hentikan Kode dan Definisi

Pemverifikasi Aplikasi - Pemverifikasi Aplikasi Penelusuran Kesalahan Berhenti

Pemverifikasi Aplikasi - Tanya Jawab Umum