Poznámka:
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
Application Verifier (AppVerifier) je nástroj pro ověřování za běhu pro nespravovaný kód, který pomáhá při hledání drobných chyb programování, problémů se zabezpečením a omezenými problémy s oprávněními uživatelských účtů, které můžou být obtížné identifikovat s běžnými technikami testování aplikací.
Doručování spolehlivých aplikací pro Windows:
- Otestujte aplikace napsané v nespravovaném (nativním) kódu s programem Application Verifier pod ladicím programem a s haldou na celé stránce, než ji uvolníte zákazníkům.
- Při řešení chybových podmínek postupujte podle kroků poskytovaných nástrojem Application Verifier.
- Po vydání aplikace pravidelně monitorujte sestavy o chybách aplikací shromážděné, například zasílání zpráv o chybách systému Windows, pokud je k dispozici.
Kontroly fonduvlákench Vzhledem k tomu, že je součástí výchozího nastavení, uživatelé musí na svém kódu spouštět ověřovatele aplikací pouze s výchozím nastavením, aby mohli tyto a další důležité kontroly využít.
Konfigurace ověřovatele aplikací
Nastavení ladicího programu
Ověřovaná aplikace by měla běžet v ladicím programu v uživatelském režimu nebo by měl systém běžet pod ladicím programem jádra, protože se při výskytu chyby rozdělí do ladicího programu. Další podrobnosti o ladicím programu najdete v tématu Application Verifier – Ladění ověřovatele aplikací zastaví.
Nastavení
Pro spuštěný proces nelze povolit ověřovatel aplikací. V důsledku toho musíte nastavit nastavení, jak je popsáno níže, a pak aplikaci spustit. Nastavení jsou trvalá, dokud se explicitně neodstraní. Proto bez ohledu na to, kolikrát spustíte aplikaci, začne s povoleným AppVerifierem, dokud se nastavení neodstraní.
Použití základního testu ověřovatele aplikací
Níže uvedené scénáře ilustrují doporučené možnosti příkazového řádku a uživatelského rozhraní. Ty by se měly spouštět během všech testů, které kód prověří úplné pokrytí. Očekávání pro tyto scénáře spočívá v tom, že aplikace nerozčlení ladicí program a všechny testy projdou se stejnou rychlostí průchodu jako při spuštění bez povoleného AppVerifieru.
Povolte ověřitel pro aplikace, které chcete testovat. Z příkazového řádku: appverif /verify MyApp.exe.
Z uživatelského rozhraní: Přidejte aplikaci tak, že kliknete pravým tlačítkem do oblasti Aplikace a vyberete Přidat aplikaci. V oblasti Testy vyberte základní informace. Klikněte na tlačítko Uložit.
Poznámky:
/verify povolí základní testy.
Pokud testujete knihovnu DLL, musí být pro testovací spustitelný soubor, který spouští knihovnu DLL, povolen program Application Verifier.
Vrstvy ověřování spusťte samostatně. Například v jedné relaci povolte všechny základní informace a na druhé povolte všechny kontroly LuaPriv.
Spusťte všechny testy, které aplikaci provádějí.
Analyzujte všechny zjištěné konce ladicího programu. Pokud dojde k přerušení, budete ho muset pochopit a opravit. POZNÁMKA: Obsah nápovědy obsahuje podrobnosti o konců a o tom, jak je prozkoumat.
Po dokončení odstraňte všechna nastavení. Z příkazového řádku: appverif /n MyApp.exe.
Z uživatelského rozhraní odeberte aplikaci tak, že kliknete pravým tlačítkem do oblasti Aplikace a vyberete Odstranit aplikaci. Potom klikněte na tlačítko Uložit.
Poškození haldy
Téměř 10% chybových ukončení aplikace v systémech Windows je způsobeno poškozením haldy. Tato selhání jsou téměř nemožné ladit po faktu. Nejlepší způsob, jak se těmto problémům vyhnout, je otestovat funkce haldy stránky nalezené v nástroji Application Verifier. Haldu stránky mají dvě varianty: "Plná" a "Světlo". Úplné je výchozí; při detekci poškození vynutí okamžité zastavení ladicího programu. Tato funkce musí být spuštěna v ladicím programu. Je to ale také nejnáročnější prostředek. Pokud má uživatel problémy s časováním a už spustil scénář v haldě celé stránky, nastavení na Light pravděpodobně tyto problémy vyřeší. Kromě toho, Light Page Halda se chybově ukončí, dokud proces neodejde. Poskytuje trasování zásobníku přidělení, ale může trvat výrazně déle, než diagnostikovat, než využít jeho úplný protějšek.
Použití simulace nízkého počtu prostředků AppVerifier (injektáž chyb)
Očekávání pro tento scénář spočívá v tom, že aplikace neprovádí ladicí program. Když ladicí program nerozdělíte, znamená to, že nemáte žádné chyby, které je potřeba vyřešit.
Míra průchodu testů může výrazně snížit, protože do normálního provozu se zavádějí náhodné injektáže chyb.
U aplikací povolte simulaci nízkého počtu prostředků (injektáž chyb) aplikace. Z příkazového řádku: Appverif /verify MyApp.exe /faults. Z uživatelského rozhraní: Přidejte aplikaci tak, že kliknete pravým tlačítkem do oblasti Aplikace a vyberete Přidat aplikaci . V oblasti Testy vyberte simulaci nízkých prostředků. Klikněte na tlačítko Uložit.
Poznámka: Pokud testujete knihovnu DLL, můžete místo celého procesu použít simulaci s nízkými prostředky (injektáž chyb) na určitou knihovnu DLL. Formát příkazového řádku by byl:
appverif /verify TARGET [/faults [PROBABILITY [TIMEOUT [DLL …]]]]
Příklad:
appverif /verify mytest.exe /faults 50000 1000 d3d9.dll
Spuštění všech testů, které aplikaci provádějí
Analyzujte všechny zjištěné konce ladicího programu. Pokud dojde k přerušení, budete ho muset pochopit a opravit.
Po dokončení odstraňte všechna nastavení. Z příkazového řádku: appverif /n MyApp.exe. Z uživatelského rozhraní: Odeberte aplikaci tak, že kliknete pravým tlačítkem myši v oblasti Aplikace a vyberete Odstranit aplikaci a kliknete na tlačítko Uložit.
Poznámka: Spuštění s cvičeními injektáže chyb z velké části liší cesty kódu v aplikaci, a proto musí být spuštěny oba scénáře, aby bylo možné získat plnou výhodu AppVerifier.
Použití nástroje Application Verifier s WOW64
K ověření 32bitové aplikace spuštěné v rámci WOW64 můžete použít 32bitovou nebo 64bitovou verzi nástroje Application Verifier.
Analýza dat AppVerifieru
Všechna data vytvořená během analýzy AppVerifier jsou uložená ve složce %USERPROFILE%\AppVerifierLogs v binárním formátu. Tyto protokoly je pak možné převést na XML prostřednictvím uživatelského rozhraní nebo příkazového řádku pro další analýzu.
K zobrazení souborů XML můžete použít libovolný nástroj k zobrazení XML, například import do Microsoft Excelu – Import souboru XML do Excelu a použití filtrů nebo kontingenčních tabulek k přeuspořádání a analýze shromážděných dat.
Použití příkazového řádku
Ověřitel aplikace se dá použít prostřednictvím uživatelského rozhraní nebo pomocí možností příkazového řádku.
Tady jsou příklady použití příkazového řádku (níže jsou uvedené podrobnosti):
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}
Povolení ověřovatele aplikací pro konkrétní ověřovací vrstvu pro dvě aplikace:
appverif –enable Heaps Locks –for notepad.exe iexplore.exe
Povolení dvou vrstev X a Y pro cílovou test.exe s vlastnostmi X.DebugLevel a Y.DebugLevel:
appverif –enable X Y –for test.exe –with X.DebugLevel=1 Y.DebugLevel=2
Zakázání všech kontrol spuštěných v aplikaci:
appverif -disable * -for notepad.exe
NEBO
appverif -delete settings -for notepad.exe
Globální povolení nebo zakázání protokolování ověřovatele aplikací pro všechny procesy:
appverif –logtofile enable
appverif –logtofile disable
Protokolování je ve výchozím nastavení povolené pro všechny procesy.
Syntaxe příkazového řádku ověřovatele aplikace
Použití příkazového řádku ověřovatele aplikace:
-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]
Syntaxe příkazového řádku přijímá jednu nebo více vrstev a aplikuje je na jeden nebo více cílů s volitelnými specifikátory vlastností pro vrstvy.
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] …]
kde:
VRSTVA je standardní název ověřovací vrstvy. Pokud je nainstalovaný nový zprostředkovatel ověření, zobrazí se v příkazovém řádku nový název ověřovací vrstvy. Ukázkové vrstvy jsou haldy, úchyty nebo zámky.
Můžete nastavit vrstvu na * a určit, že příkaz platí pro všechny vrstvy.
TARGET je binární název (např. notepad.exe). Jedná se o statické nastavení, které je trvalé v registru a při každém spuštění aplikace se bude brát v úvahu. Pro příkaz appverif –disable můžete nastavit target na * a určit, že všechny cíle by měly být zakázány.
VLASTNOST je název vlastnosti specifický pro vrstvu uvedenou v příkazovém řádku. Vrstva Handles má například trasování jako vlastnost.
HODNOTA je hodnota vlastnosti. Typ hodnoty závisí na typu přidruženém k vlastnosti a bude vynucován. Podporované typy jsou: logická hodnota (true/false), celé číslo (desítkové/osmičkové/šestnáctkové v zápisu jazyka C), řetězec a více řetězců (obsahující \0’ between strings and being terminated by \0\0'). Pokud hodnota není zadaná, znamená to, že uživatel chce tuto vlastnost odstranit a vrátit se k výchozí hodnotě vlastnosti.
STOP je číslo (desítkové nebo šestnáctkové číslo v zápisu jazyka C) problému s zastavením ověřovatele, který se má nakonfigurovat. Kódy stop musí být jedinečné (žádné dvě vrstvy nemohou použít stejný kód zastavení, proto nástroj sám určí, do jaké vrstvy stopa patří).
STOPPROPERTY je název vlastnosti, který je přijatelný pro zastavení ověřovatele. Pokud není zadaná hodnota, předpokládá se, že vlastnost musí být odstraněna. Povolené vlastnosti pro zastavení jsou (další podrobnosti najdete v části Konfigurace kontrolních zarážek níže):
- Zpráva o chybě
- Závažnost
- Příchuť
Vlastnosti mohou být volitelně kvalifikované vrstvou, do které patří. To ale není potřeba, pokud příkazový řádek povolí jenom jednu vrstvu. Pokud chcete například povolit dvě vrstvy s názvem X a Y pro cílovou test.exe s vlastnostmi X.DebugLevel a Y.DebugLevel, příkaz je:
appverif –enable X Y –for test.exe –with X.DebugLevel=1 Y.DebugLevel=2
Pokud je však povolena vrstva X, lze použít nekvalifikovaný název vlastnosti:
appverif –enable X –for test.exe –with DebugLevel=1
Znak oddělovače mezi názvem vlastnosti a hodnotou může být = (rovnítko) nebo : (dvojtečka).
Různé příkazy
appverif –query providers
appverif –delete logs –for TARGET ...
appverif –delete settings –for TARGET ...
Úplně vymazáte cíl z registru.
appverif –stamp log –for Target –with Stamp=”LOG_STAMP”[Log= RELATIVE_TO_LAST_INDEX]
Tento příkaz označí protokol pomocí LOG_STAMP. Toto razítko je užitečné při prohlížení protokolu ve formuláři XML identifikovat pouze část protokolu.
appverif –export log –for TARGET –with To=XML_FILE[Symbols=SYMBOL_PATH][Stamp=LOG_STAMP][StampTo=LOG_STAMP][Log=RELATIVE_TO_LAST_INDEX]
Výše uvedený příkaz exportuje binární protokol do souboru XML. Volitelná vlastnost Razítko slouží k identifikaci části protokolu, která má být exportována do XML. Pokud ho nezadáte, celý protokol se převede. Vlastnost Log má co největší hodnotu záporné celé číslo a označuje, jaký soubor protokolu by se měl převést od poslední hodnoty (předpokládá se, že vlastnost není k dispozici). Například spusťte notepad.exe třikrát za sebou. Pokud chcete získat přístup k prvnímu vytvořenému protokolu, na příkazovém řádku zadejte Log=-2.
Klávesové zkratky pro příkazový řádek
Toto jsou klávesové zkratky:
appverif /verify TARGET [/faults [PROBABILITY [TIMEOUT [DLL …]]]]
kde:
CÍL má stejný význam jako výše popsaný.
PRAVDĚPODOBNOST je pravděpodobnost vložení chyb. Musí být hodnota v rozsahu 0..1000000. Pokud není zadána výchozí hodnota je 5%.
ČASOVÝ LIMIT je časový interval v milisekundách během spouštění procesu, pokud nedojde k injektáži chyby. To se provádí, aby se proces správně spouštěl, než dojde k chybám. Pokud není zadána hodnota je 500 ms.
Knihovna DLL je název modulu, který se načte v procesu. Obvykle se jedná o název dynamické knihovny (rozšíření .dll), ale může to být ActiveX (přípona .ocx) nebo jiný načístelný modul.
Příklady:
appverif /verify notepad.exe /faults 100000 1000 msvcrt.dll
Povolte injektáž chyb pro notepad.exe (kdykoli se spustí). Chyby by měly nastat s pravděpodobností 10%, pouze 1000 ms po spuštění procesu a pouze pro operace zahájené z msvcrt.dll.
Povolení podrobností o injektáži chyb
Pomocí příkazového řádku /faults povolíte injektáž chyb pouze pro OLE_ALLOC a HEAP_ALLOC. Pomocí příkazového řádku ale můžete nakonfigurovat typ injektáže selhání, který chcete zapnout. Pokud například chcete vložit chybu do registru nebo rozhraní API souborů jako 2%, použijte příkazový řádek:
appverif -enable lowres -for hello.exe -with registry=20000 file=20000
Další příklad:
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
Konfigurace zastavení ověřovatele
Pomocí příkazového řádku (nebo uživatelského rozhraní) můžete nakonfigurovat zastavení ověřovatele. Tady jsou příklady, které můžete využít:
Appverif -configure STOP ... -for TARGET ... -with PROPERTY=VALUE ...
STOP je kód stop, například 0x200 0x201
TARGET je název aplikace, například foo.exe
VLASTNOST může být jedna z chybových zpráv, závažnosti a příchuť.
Pro ErrorReport může být hodnota kombinace následujících hodnot.
0x00000001 znamená, že je zastavení aktivní. (Pokud je tento bit nulový, znamená to, že je zakázané zastavení.
0x00000020 znamená, že zastavení se rozdělí do ladicího programu pomocí zarážky.
0x00000040 znamená přerušení do ladicího programu vygenerováním výjimky ověřitele.
0x00000080 znamená, že se do souboru protokolu zaprotokoluje zastavení.
0x00000100 znamená, že trasování zásobníku pro tuto stopu se zaprotokoluje do souboru protokolu.
Pro závažnost může být hodnota jedna z následujících možností.
0x00000003 informativní zastávka.
0x0000000F Upozornění.
0x0000003F Chyba.
Pro Flavor , Value může být kombinace následujících hodnot.
0x00000002 nesplněnou zastávku.
0x00000010 Tato zastávka se zobrazí jenom jednou. V rámci testovacího běhu bude ignorován následující čas.
Můžete například zakázat 0x2700, 0x2701 pro foo.exe
Appverif –configure 0x2700 0x2701 –for foo.exe –with ErrorReport=0
Nakonfigurujte 0x2700 zastavení kódu tak, aby se rozdělil do ladicího programu (ve výchozím nastavení je vypnutý), uložil protokol bez trasování zásobníku a nepřerušil ho.
Appverif –configure 0x2700 –for foo.exe –with ErrorReport=0xA1 Flavor=0x2
Možnosti zastavení ověřovatele – Upřesňující nastavení
Verifier aplikace má upřesňující nastavení, jako je inaktivace, které můžete změnit na zarážku ověřovatele.
Možnosti zastavení aplikace Access – Možnosti zastavení ověřovatele se změní v dialogovém okně se seznamem dostupných možností. Přístup k možnostem zastavení ověřovatele:
- V podokně Testy vyberte název testu.
- V nabídce Upravit vyberte Možnosti zastavení ověřitele nebo klikněte pravým tlačítkem myši na test a vyberte Možnosti zastavení ověřitele.
Možnosti zastavení ověřovatele
Můžete změnit následující prvky na zarážku ověřovatele kliknutím na kód zastavení (všimněte si, že popis zastavení se zobrazí po kliknutí).
Neaktivní je zaškrtávací políčko, které když je zaškrtnuté, deaktivuje ověřitel zastavit spuštění kódu.
Závažnost určuje, jak se má ověřitel zastavit:
- Ignorovat
- Informace
- Varování
- Chyba
Zasílání zpráv o chybách určuje, jak chcete, aby se konkrétní ověřovatel přestal hlásit nebo zaprotokolovat:
Log to File – zaškrtávací políčko, které se po výběru přihlásí k určenému souboru.
Trasování zásobníku protokolů – zaškrtávací políčko, které při výběru zapíše trasování zásobníku, když jsou k dispozici.
Bez přerušení – možnost přerušení v ladicím programu.
Výjimka – možnost bez zarážky a zarážky
Zarážka – možnost spolu s žádným přerušením nebo výjimkou
Různé nabízí dvě možnosti
Zastavit jednou – zaškrtávací políčko, které se při testování aplikace zastaví, jenom když je tato chyba zaškrtnutá.
Není možné pokračovat – zaškrtávací políčko, které, když je zaškrtnuté, nebudete moci pokračovat bez vyšetřování.
Viz také
Application Verifier – přehled
Application Verifier – testy v rámci
Application Verifier – kódy stop a definice