Aracılığıyla paylaş


Uygulama Doğrulayıcı - Uygulamaları Test Etme

Uygulama Doğrulayıcı (AppVerifier), normal uygulama testi teknikleriyle tanımlanması zor olabilecek küçük programlama hataları, güvenlik sorunları ve sınırlı kullanıcı hesabı ayrıcalık sorunlarının bulunmasına yardımcı olan yönetilmeyen kodlara yönelik bir çalışma zamanı doğrulama aracıdır.

Güvenilir Windows uygulamaları sunmak için:

  1. Yönetilmeyen (yerel) kodla yazılmış uygulamaları, hata ayıklayıcının altında Uygulama Doğrulayıcı ile ve müşterilere yayınlamadan önce tam sayfa yığınıyla test edin.
  2. Hatalı koşulları çözmek için Uygulama Doğrulayıcı tarafından sağlanan adımları izleyin.
  3. Uygulamanız yayımlandıktan sonra, toplanan uygulama hatası raporlarını düzenli olarak izleyin; örneğin varsa Windows Hata Bildirimi.

İş parçacığı havuzu denetimleri , "Temel bilgiler" denetim başlığı altında varsayılan olarak etkindir. Bu varsayılan ayara eklendiğinden, kullanıcıların bu ve diğer önemli denetimlerden yararlanmak için yalnızca varsayılan ayarlarla kodlarında Uygulama Doğrulayıcı'yı çalıştırmaları gerekir.

Uygulama Doğrulayıcıyı Yapılandırma

Hata ayıklayıcısı kurulumu

Doğrulanan uygulama kullanıcı modu hata ayıklayıcısı altında çalıştırılmalıdır veya bir hata oluştuğunda hata ayıklayıcıya bölüneceğinden sistem bir çekirdek hata ayıklayıcısı altında çalıştırılmalıdır. Daha fazla hata ayıklayıcı ayrıntısı için bkz. Uygulama Doğrulayıcı - Hata Ayıklama Uygulama Doğrulayıcı Durduruyor.

Ayarlar

Çalışan bir işlem için Uygulama Doğrulayıcı etkinleştirilemez. Sonuç olarak, aşağıda açıklandığı gibi ayarları yapmanız ve ardından uygulamayı başlatmanız gerekir. Ayarlar açıkça silinene kadar kalıcıdır. Bu nedenle, bir uygulamayı kaç kez başlatırsanız başlatın, ayarlar silinene kadar AppVerifier etkin olarak başlar.

Uygulama Doğrulayıcı TemelLerini Kullanma Testi

Aşağıdaki senaryolarda önerilen komut satırı ve kullanıcı arabirimi seçenekleri gösterilmektedir. Bunlar, kapsamın tamamını sağlamak için kodu kullanan tüm testler sırasında çalıştırılmalıdır. Bu senaryolar için beklenti, uygulamanın hata ayıklayıcıya girmemesi ve tüm testlerin AppVerifier etkinleştirilmeden çalıştırıldığında olduğu gibi aynı geçiş hızıyla geçmesidir.

Kullanarak test etmek istediğiniz uygulamalar için doğrulayıcıyı etkinleştirin. Komut satırından: appverif /verify MyApp.exe.

Kullanıcı arabiriminden: Uygulamalar alanına sağ tıklayıp Uygulama Ekle'yi seçerek uygulamanızı ekleyin. Testler alanından Temel Bilgiler'i seçin. Kaydet düğmesine tıklayın.

Notlar:

/verify temel testleri etkinleştirecek

BIR DLL'yi test ediyorsanız, DLL'yi kullanan test yürütülebilir dosyası için Uygulama Doğrulayıcı'nın etkinleştirilmesi gerekir.

Doğrulama katmanlarını ayrı ayrı çalıştırın. Örneğin, bir oturumda tüm Temel Bilgileri etkinleştirirken diğerinde tüm LuaPriv denetimlerini etkinleştirin.

Uygulamayı kullanarak TÜM testlerinizi çalıştırın.

Karşılaşılan hata ayıklayıcı kesmelerini analiz edin. Bir kesme oluşursa bunu anlamanız ve düzeltmeniz gerekir. NOT: Yardım içeriği, kesmeler ve bunların nasıl araştırılmasıyla ilgili ayrıntılar sağlar.

İşiniz bittiğinde tüm ayarları silin. Komut satırından: appverif /n MyApp.exe.

Kullanıcı arabiriminden, Uygulamalar alanına sağ tıklayıp Uygulamayı Sil'i seçerek uygulamanızı kaldırın. Ardından Kaydet düğmesine tıklayın.

Yığın Bozulması

Windows sistemlerinde yaklaşık 10% uygulama kilitlenmesi yığın bozulmasından kaynaklanıyor. Bu kilitlenmelerin hata ayıklaması olgudan sonra neredeyse imkansızdır. Bu sorunlardan kaçınmanın en iyi yolu, Uygulama Doğrulayıcı'da bulunan Sayfa Yığını özellikleriyle test etmektir. Sayfa Yığını'nın iki çeşidi vardır: "Dolu" ve "Işık." Tam varsayılan değerdir; bozulma algılanırken hata ayıklayıcının anında durmasını zorlar. Bu özellik hata ayıklayıcının altında çalıştırılmalıdır. Ancak, aynı zamanda en zorlu kaynaktır. Bir kullanıcı zamanlama sorunları yaşıyorsa ve "Tam" Sayfa Yığını altında zaten bir senaryo çalıştırdıysa, bunu "Açık" olarak ayarlamak büyük olasılıkla bu sorunları çözecektir. Ayrıca, işlem çıkana kadar Açık Sayfa Yığını kilitlenmez. Ayırma için bir yığın izlemesi sağlar, ancak tanılamak tam karşılık gelenden yararlanmaktan çok daha uzun sürebilir.

AppVerifier Düşük Kaynak Benzetimini Kullanma (hata ekleme)

Bu senaryo için beklenti, uygulamanın hata ayıklayıcıya girmemesidir. Hata ayıklayıcıya girilmemesi, çözülmesi gereken bir hata olmadığı anlamına gelir.

Rastgele hata eklemeleri normal işleme dahil olduğundan testlerin geçiş hızı önemli ölçüde düşebilir.

Uygulamalar için Uygulama Doğrulayıcı Düşük Kaynak Benzetimi'ni (hata ekleme) etkinleştirin. Komut satırından: Appverif /verify MyApp.exe /faults. Kullanıcı arabiriminden: Uygulamalar alanına sağ tıklayıp Uygulama Ekle'yi seçerek uygulamanızı ekleyin. Testler alanından Düşük Kaynak Benzetimi'ni seçin. Kaydet düğmesine tıklayın.

Not: Bir DLL'yi test ediyorsanız, tüm işlem yerine belirli bir DLL'ye düşük kaynak benzetimi (hata ekleme) uygulayabilirsiniz. Komut satırı biçimi şu şekilde olabilir:

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

Örnek:

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

Uygulamayı kullanarak TÜM testlerinizi çalıştırma

Karşılaşılan hata ayıklayıcı kesmelerini analiz edin. Bir kesme oluşursa bunu anlamanız ve düzeltmeniz gerekir.

İşiniz bittiğinde tüm ayarları silin. Komut satırından: appverif /n MyApp.exe. Kullanıcı arabiriminden: Uygulamalar alanına sağ tıklayıp Uygulamayı Sil'i seçerek kaydet düğmesine tıklayarak uygulamanızı kaldırın.

Not: Bir uygulamada hata ekleme alıştırmalarıyla ve hatasız çalıştırma alıştırmaları büyük ölçüde farklı kod yollarıdır ve bu nedenle AppVerifier'ın tüm avantajlarından yararlanmak için her iki senaryo da çalıştırılmalıdır.

WOW64 ile Uygulama Doğrulayıcı kullanma

WOW64 altında çalışan bir 32 bit uygulamayı doğrulamak için Uygulama Doğrulayıcı'nın 32 bit sürümünü veya 64 bit sürümünü kullanabilirsiniz.

AppVerifier Verilerini Çözümleme

AppVerifier analizi sırasında oluşturulan tüm veriler %USERPROFILE%\AppVerifierLogs klasöründe ikili biçimde depolanır. Daha sonra bu günlükler, daha fazla analiz için kullanıcı arabirimi veya komut satırı aracılığıyla XML'ye dönüştürülebilir.

XML dosyalarını görüntülemek için, XML'yi görüntülemek için herhangi bir aracı kullanabilirsiniz; örneğin, Microsoft Excel'e aktarma - XML dosyasını Excel'e aktarın ve toplanan verileri yeniden düzenlemek ve çözümlemek için filtreleri veya Özet Tabloları kullanın.

Komut Satırını Kullanma

Uygulama Doğrulayıcı, kullanıcı arabirimi aracılığıyla veya komut satırı seçenekleri kullanılarak kullanılabilir.

Aşağıda komut satırının nasıl kullanılacağına ilişkin örnekler verilmiştir (ayrıntılar aşağıda verilmiştir):

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}

Uygulama Doğrulayıcı'yı iki uygulama için belirli bir doğrulama katmanında etkinleştirmek için:

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

X.DebugLevel ve Y.DebugLevel özelliklerine sahip hedef test.exe için X ve Y adlı iki katmanı etkinleştirmek için:

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

Bir uygulamada çalıştırılacak tüm denetimleri devre dışı bırakmak için:

appverif -disable * -for notepad.exe

VEYA

appverif -delete settings -for notepad.exe

Tüm işlemler için Uygulama Doğrulayıcı günlüğünü genel olarak etkinleştirmek veya devre dışı bırakmak için:

appverif –logtofile enable

appverif –logtofile disable

Günlük, tüm işlemler için varsayılan olarak etkindir.

Uygulama Doğrulayıcı Komut Satırı Sözdizimi

Uygulama Doğrulayıcı Komut Satırı Kullanımı:

-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]

Komut satırı söz dizimi bir veya daha fazla katmanı kabul eder ve bunları katmanlar için isteğe bağlı özellik tanımlayıcılarına sahip bir veya daha fazla hedefe uygular.

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] …]

nerede:

KATMAN, doğrulama katmanı için standart bir addır. Yeni bir doğrulayıcı sağlayıcısı yüklüyse bu, komut satırında kullanılacak yeni bir doğrulama katmanı adını kullanıma sunar. Örnek katmanlar Yığın, Tutamaçlar veya Kilitlerdir.

Komutun tüm katmanlara uygulanacağını belirtmek için LAYER değerini * olarak ayarlayabilirsiniz.

TARGET bir ikili addır (örneğin, notepad.exe). Bu, kayıt defterinde kalıcı olan ve uygulama her başlatıldığında dikkate alınacak statik bir ayardır. appverif –disable komutu için TARGET değerini * olarak ayarlayarak tüm hedeflerin devre dışı bırakılması gerektiğini belirtebilirsiniz.

PROPERTY, komut satırında belirtilen LAYER'a özgü özellik adıdır. Örneğin, Handles katmanında özellik olarak izlemeler bulunur.

VALUE özelliği için bir değerdir. Değerin türü özelliğiyle ilişkili türe bağlıdır ve zorlanır. Şimdilik desteklenen türler şunlardır: boole (true/false), tamsayı (C gösteriminde ondalık/sekizlik/onaltılık), dize ve çok dizeli (\0’ between strings and being terminated by \0\0' içeren). DEĞER belirtilmezse, kullanıcı bu özelliği silmek ve davranışı özelliğin varsayılan değerine geri döndürmek istediği anlamına gelir.

STOP, yapılandırılacak doğrulayıcı durdurma sorununun sayısıdır (C gösteriminde ondalık veya onaltılık). Durdurma kodları benzersiz olmalıdır (iki katman aynı durdurma kodunu kullanamaz, bu nedenle aracın kendisi durağın hangi katmana ait olduğunu belirler)

STOPPROPERTY, doğrulayıcı durakları için kabul edilebilir bir özellik adıdır. Değer belirtilmezse özelliğin silinmesi gerektiği varsayılır. Duraklar için izin verilen özellikler şunlardır (Daha fazla ayrıntı için aşağıdaki Doğrulayıcı Duraklarını Yapılandırma bölümüne bakın):

  • ErrorReport
  • Şiddet
  • Lezzet

Özellikler isteğe bağlı olarak ait oldukları katman tarafından nitelenebilir. Ancak, komut satırı yalnızca bir katmanı etkinleştirirse bu gerekli değildir. Örneğin, X.DebugLevel ve Y.DebugLevel özelliklerine sahip hedef test.exe için X ve Y adlı iki katmanı etkinleştirmek için komutu şöyledir:

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

Ancak X katmanı etkinse nitelenmemiş bir özellik adı kullanılabilir:

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

Özellik adı ve değer arasındaki ayırıcı karakter = (eşittir işareti) veya : (iki nokta üst üste) olabilir.

Çeşitli komutlar

appverif –query providers

appverif –delete logs –for TARGET ...

appverif –delete settings –for TARGET ...

Kayıt defterinden TARGET'ı tamamen silin.

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

Bu komut, günlüğü LOG_STAMP ile damgalar. Bu damga, XML biçiminde günlüğü görüntülerken günlüğün yalnızca ilgili bir bölümünü tanımlamak için kullanışlıdır.

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

Yukarıdaki komut, ikili günlüğü bir xml dosyasına aktarır. İsteğe bağlı Stamp özelliği, günlüğün hangi bölümünün XML'ye dışarı aktarılması gerektiğini belirlemek için kullanılır. Belirtilmezse, günlüğün tamamı dönüştürülür. Log özelliği, mümkün olduğunca negatif bir tamsayıya sahiptir ve son değerden başlayarak hangi günlük dosyasının dönüştürülmesi gerektiğini gösterir (özellik yoksa varsayılır). Örneğin, notepad.exe art arda üç kez başlatın. Oluşturulan ilk günlüğe erişmek için komut satırında Log=-2 belirtin.

Komut Satırı Kısayolları

Kısayollar şunlardır:

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

nerede:

TARGET, yukarıda açıklananla aynı anlama sahiptir.

OLASıLıK, hata ekleme olasılığıdır. 0..1000000 aralığındaki bir değer olmalıdır. Belirtilmezse, varsayılan değer 5%olur.

ZAMAN AŞıMı, hata eklemenin gerçekleşmediği işlem başlatma sırasında milisaniye cinsinden zaman aralığıdır. Bu işlem, hata gerçekleşmeden önce işlemin düzgün şekilde başlatılmasına izin vermek için yapılır. Belirtilmezse değer 500 milisaniyedir.

DLL, işlemde yüklenen modülün adıdır. Bu genellikle dinamik kitaplığın adıdır (uzantı .dll) ancak bir ActiveX (uzantı .ocx) veya başka bir yüklenebilir modül olabilir.

Örnekler:

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

notepad.exe için hata ekleme özelliğini etkinleştirin (her başlatıldığında). Hatalar, 10%, işlem başlatıldıktan sonra yalnızca 1000 msec ve yalnızca msvcrt.dll'den başlatılan işlemler için gerçekleşmelidir.

Hata Ekleme ayrıntılarını etkinleştirme

/faults komut satırının kullanılması yalnızca OLE_ALLOC ve HEAP_ALLOC için hata eklemeyi etkinleştirir. Ancak, açmak istediğiniz hata ekleme türünü yapılandırmak için komut satırını kullanabilirsiniz. Örneğin, bir kayıt defterine veya dosya API'sine 2%olarak hata eklemek istiyorsanız komut satırını kullanın:

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

Başka bir örnek:

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

Doğrulayıcı Duraklarını Yapılandırma

Komut satırını (veya kullanıcı arabirimini) kullanarak doğrulayıcı duraklarını yapılandırabilirsiniz. Aşağıda, yararlanacak örnekler verilmiştir:

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

STOP, 0x200 0x201 gibi durdurma kodudur

TARGET, foo.exe gibi bir uygulama adıdır

PROPERTY , "ErrorReport", "Önem Derecesi" ve "Flavor" değerlerinden biri olabilir

ErrorReport için, VALUE aşağıdaki değerlerin birleşimi olabilir.

0x00000001, durdurmanın etkin olduğu anlamına gelir. (Bu bit sıfırsa, durdurmanın devre dışı olduğu anlamına gelir)

0x00000020, durdurmanın kesme noktası kullanarak hata ayıklayıcıya bölüneceği anlamına gelir.

0x00000040, bir Doğrulayıcı Özel Durumu oluşturarak hata ayıklayıcıya kesmeyi durdurma anlamına gelir.

0x00000080, durdurmanın günlük dosyasına kaydedileceği anlamına gelir.

0x00000100, bu durağın yığın izlemesinin günlük dosyasına kaydedileceği anlamına gelir.

Önem Derecesi için VALUE aşağıdakilerden biri olabilir.

0x00000003 Bilgilendirici dur.

uyarı 0x0000000F.

0x0000003F Hatası.

Flavor için, Değer aşağıdaki değerlerin birleşimi olabilir.

0x00000002 Devam edilemeyen durdurma.

0x00000010 Bu durak yalnızca bir kez görünür. Aşağıdaki test çalıştırması içinde yoksayılır.

Örneğin, foo.exe için 0x2701 0x2700 durdurmaları devre dışı bırakın

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

Durdurma kodu 0x2700 hata ayıklayıcıya (varsayılan olarak kapalıdır), yığın izlemesi olmadan bir günlüğü kaydederek devam edilemeyecek şekilde yapılandırın

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

Doğrulayıcı Durdurma Seçenekleri - Gelişmiş Ayarlar

Uygulama Doğrulayıcı'nın, doğrulayıcı durağı başına değiştirebileceği Inactivate gibi gelişmiş ayarları vardır.

Erişim Doğrulayıcı Durdurma Seçenekleri - Kullanılabilir seçenekleri listeleyen bir iletişim kutusunda Doğrulayıcı durdurma seçenekleri değiştirilir. Doğrulayıcı durdurma seçeneklerine erişmek için:

  1. Testler bölmesinde testin adını seçin.
  2. Düzenle menüsünde Doğrulayıcı Durdurma Seçenekleri'ni seçin veya teste sağ tıklayın ve Doğrulayıcı Durdurma Seçenekleri'ni seçin.

Doğrulayıcı Durdurma Seçenekleri

Durdurma koduna tıklayarak listelenen doğrulayıcı durağı başına aşağıdaki öğeleri değiştirebilirsiniz (tıklandığında durağın açıklamasının görüneceğini unutmayın).

Etkin değil, seçildiğinde doğrulayıcı durdurma kodunun çalıştırılmasını devre dışı bırakacağı bir onay kutusudur.

Önem derecesi, doğrulayıcı durağına nasıl bayrak ekleneceğini belirler:

  • Yok say
  • Bilgi
  • Uyarı
  • Hata

Hata Raporlama, belirli bir doğrulayıcının nasıl raporlanması/günlüğe kaydedilmesini istediğinizi belirler:

Dosyaya Oturum Aç - seçildiğinde belirlenen dosyada oturum açan bir onay kutusu.

Günlük Yığını İzleme - seçildiğinde kullanılabilir olduklarında yığın izlemelerini günlüğe kaydedecek bir onay kutusu.

Kesme Yok - hata ayıklayıcıda kesmeme seçeneği.

Özel durum - kesme ve kesme noktası olmadan bir seçenek

Kesme noktası - kesme veya özel durum içermeyen bir seçenektir.

Çeşitli seçenekler iki seçenek sunar

Bir Kez Durdur - seçildiğinde bir uygulamayı test ederken bu hatanın yalnızca bir kez durdurulacağı bir onay kutusu.

Devam Edilmiyor - seçildiğinde araştırma yapmadan devam etmene izin vermeyecek bir onay kutusu.

Ayrıca Bkz.

Uygulama Doğrulayıcı - Genel Bakış

Uygulama Doğrulayıcı - Özellikler

Uygulama Doğrulayıcı - Uygulama Doğrulayıcı içindeki testler

Uygulama Doğrulayıcı - Durdurma Kodları ve Tanımları

Uygulama Doğrulayıcı - Hata Ayıklama Uygulama Doğrulayıcı durduruluyor

Uygulama Doğrulayıcı - Sık Sorulan Sorular