Notitie
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen u aan te melden of de directory te wijzigen.
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen de mappen te wijzigen.
Application Verifier (AppVerifier) is een hulpprogramma voor runtimeverificatie voor onbeheerde code die helpt bij het vinden van subtiele programmeerfouten, beveiligingsproblemen en problemen met beperkte bevoegdheden voor gebruikersaccounts die moeilijk te identificeren zijn met normale technieken voor het testen van toepassingen.
Betrouwbare Windows-toepassingen leveren:
- Test toepassingen die zijn geschreven in niet-beheerde (systeemeigen) code met Application Verifier onder het foutopsporingsprogramma en met volledige pagina heap voordat deze wordt vrijgegeven aan klanten.
- Volg de stappen van Application Verifier om foutieve voorwaarden op te lossen.
- Zodra uw toepassing is uitgebracht, controleert u regelmatig de rapporten over toepassingsfouten die worden verzameld, bijvoorbeeld door Windows Foutrapportage, indien beschikbaar.
Thread-poolcontroles zijn standaard ingeschakeld onder de kop Basiscontrole. Omdat deze is opgenomen in de standaardinstelling, hoeven gebruikers alleen Application Verifier uit te voeren op hun code met de standaardinstellingen om deze en andere belangrijke controles te kunnen gebruiken.
Toepassingsverifier configureren
Installatie van foutopsporingsprogramma
De toepassing die wordt geverifieerd, moet worden uitgevoerd onder een foutopsporingsprogramma in de gebruikersmodus of het systeem moet worden uitgevoerd onder een kernelfoutopsporingsprogramma, omdat deze wordt opgesplitst in een foutopsporingsprogramma wanneer er een fout optreedt. Zie Application Verifier - Foutopsporing van toepassingsverificator stopt voor meer foutopsporingsprogrammadetails.
Instellingen
Toepassingsverificator kan niet worden ingeschakeld voor een actief proces. Als gevolg hiervan moet u instellingen maken zoals hieronder wordt beschreven en vervolgens de toepassing starten. De instellingen zijn permanent totdat ze expliciet worden verwijderd. Daarom, ongeacht hoe vaak u een toepassing start, wordt deze gestart met AppVerifier ingeschakeld totdat de instellingen worden verwijderd.
Basistest voor toepassingsverificator gebruiken
In de onderstaande scenario's ziet u de aanbevolen opdrachtregel- en gebruikersinterfaceopties. Deze moeten worden uitgevoerd tijdens alle tests die de code uitvoeren om volledige dekking te garanderen. De verwachting voor deze scenario's is dat de toepassing niet insplitst in het foutopsporingsprogramma en dat alle tests met dezelfde wachtwoordfrequentie slagen als wanneer deze worden uitgevoerd zonder AppVerifier ingeschakeld.
Schakel de verificator in voor de toepassingen die u wilt testen. Vanaf de opdrachtregel: appverif /verify MyApp.exe.
Vanuit de gebruikersinterface: Voeg uw toepassing toe door met de rechtermuisknop in het gebied Toepassingen te klikken en Toepassing toevoegen te selecteren. Selecteer de basisbeginselen in het gebied Tests. Klik op de knop Opslaan.
Opmerkingen:
/verify schakelt de basistests in
Als u een DLL test, moet Toepassingsverifier zijn ingeschakeld voor het uitvoerbare testbestand dat de DLL uitvoert.
Voer de verificatielagen afzonderlijk uit. Schakel in één sessie bijvoorbeeld alle basisbeginselen in en op een andere sessie alle LuaPriv-controles in.
Voer AL uw tests uit om de toepassing uit te oefenen.
Analyseer eventuele onderbrekingen van foutopsporingsprogramma's. Als er een onderbreking optreedt, moet u deze begrijpen en oplossen. OPMERKING: De Help-inhoud bevat details over de einden en hoe u deze kunt onderzoeken.
Wanneer u klaar bent, verwijdert u alle instellingen. Vanaf de opdrachtregel: appverif /n MyApp.exe.
Verwijder uw toepassing vanuit de gebruikersinterface door met de rechtermuisknop in het gebied Toepassingen te klikken en Toepassing verwijderen te selecteren. Klik vervolgens op de knop Opslaan.
Heap Corruptie
Bijna 10% van toepassingscrashes op Windows-systemen zijn te wijten aan heap-beschadiging. Deze crashes zijn bijna onmogelijk om fouten op te sporen na het feit. De beste manier om deze problemen te voorkomen, is door te testen met de Pagina Heap-functies in Application Verifier. Er zijn twee smaken van Page Heap: 'Volledig' en 'Licht'. Volledig is de standaardwaarde; hiermee wordt een foutopsporingsprogramma onmiddellijk gestopt bij het detecteren van beschadiging. Deze functie MOET worden uitgevoerd onder het foutopsporingsprogramma. Het is echter ook de meest veeleisende resource. Als een gebruiker timingproblemen ondervindt en al een scenario heeft uitgevoerd onder 'Volledige' pagina heap, zal het instellen op 'Licht' deze problemen waarschijnlijk oplossen. Bovendien loopt Light Page Heap niet vast totdat het proces wordt afgesloten. Het biedt wel een stack-tracering voor de toewijzing, maar kan aanzienlijk langer duren om te diagnosticeren dan het gebruik van de volledige tegenhanger.
AppVerifier lage resourcesimulatie gebruiken (foutinjectie)
De verwachting voor dit scenario is dat de toepassing niet inbreken in het foutopsporingsprogramma. Door het foutopsporingsprogramma niet in te breken, betekent dit dat u geen fouten hebt die moeten worden opgelost.
De passsnelheid voor de tests kan aanzienlijk afnemen omdat willekeurige foutinjecties in de normale werking worden geïntroduceerd.
Schakel Application Verifier Low Resource Simulation (foutinjectie) in voor de toepassing(en). Vanaf de opdrachtregel: Appverif /verify MyApp.exe /faults. Vanuit de gebruikersinterface: Voeg uw toepassing toe door met de rechtermuisknop in het gebied Toepassingen te klikken en Toepassing toevoegen te selecteren. Selecteer de lage resourcesimulatie in het gebied Tests. Klik op de knop Opslaan.
Opmerking: Als u een DLL test, kunt u een lage resourcesimulatie (foutinjectie) toepassen op een bepaalde DLL in plaats van het hele proces. De opdrachtregelindeling is:
appverif /verify TARGET [/faults [PROBABILITY [TIMEOUT [DLL …]]]]
Voorbeeld:
appverif /verify mytest.exe /faults 50000 1000 d3d9.dll
Alle tests uitvoeren die de toepassing uitoefenen
Analyseer eventuele onderbrekingen van foutopsporingsprogramma's. Als er een onderbreking optreedt, moet u deze begrijpen en oplossen.
Wanneer u klaar bent, verwijdert u alle instellingen. Vanaf de opdrachtregel: appverif /n MyApp.exe. Verwijder uw toepassing vanuit de gebruikersinterface door met de rechtermuisknop in het gebied Toepassingen te klikken en Toepassing verwijderen te selecteren en op de knop Opslaan te klikken.
Opmerking: Uitvoeren met en zonder foutinjectie oefeningen grotendeels verschillende codepaden in een toepassing en daarom moeten beide scenario's worden uitgevoerd om het volledige voordeel van AppVerifier te krijgen.
Toepassingsverificator gebruiken met WOW64
U kunt de 32-bits of de 64-bits versie van Application Verifier gebruiken om te controleren of een 32-bits toepassing wordt uitgevoerd onder WOW64.
AppVerifier-gegevens analyseren
Alle gegevens die tijdens de AppVerifier-analyse worden gemaakt, worden opgeslagen in de map %USERPROFILE%\AppVerifierLogs in een binaire indeling. Deze logboeken kunnen vervolgens worden geconverteerd naar XML via de gebruikersinterface of opdrachtregel voor verdere analyse.
Als u de XML-bestanden wilt weergeven, kunt u elk hulpprogramma gebruiken om de XML weer te geven, bijvoorbeeld het importeren in Microsoft Excel: het XML-bestand importeren in Excel en filters of draaitabellen gebruiken om de verzamelde gegevens opnieuw te organiseren en te analyseren.
De opdrachtregel gebruiken
Toepassingsverificator kan worden gebruikt via de gebruikersinterface of met behulp van opdrachtregelopties.
Hieronder vindt u voorbeelden van het gebruik van de opdrachtregel (hieronder vindt u de details):
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}
Toepassingscontrole inschakelen voor een specifieke verificatielaag voor twee toepassingen:
appverif –enable Heaps Locks –for notepad.exe iexplore.exe
Als u twee lagen met de naam X en Y wilt inschakelen voor doel-test.exe met eigenschappen X.DebugLevel en Y.DebugLevel:
appverif –enable X Y –for test.exe –with X.DebugLevel=1 Y.DebugLevel=2
Alle controles die worden uitgevoerd op een toepassing uitschakelen:
appverif -disable * -for notepad.exe
OF
appverif -delete settings -for notepad.exe
Voor het globaal in- of uitschakelen van logboekregistratie van toepassingsverificator voor alle processen:
appverif –logtofile enable
appverif –logtofile disable
Logboekregistratie is standaard ingeschakeld voor alle processen.
Opdrachtregelsyntaxis van toepassingsverificator
Gebruik van opdrachtregeltoepassingsverificator:
-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]
De syntaxis van de opdrachtregel accepteert een of meer lagen en past deze toe op een of meer doelen met optionele eigenschapsaanduidingen voor lagen.
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] …]
waarbij geldt:
LAYER is een standaardnaam voor een verificatielaag. Als er een nieuwe verifier-provider is geïnstalleerd, wordt er een nieuwe naam voor de verificatielaag weergegeven die moet worden gebruikt in de opdrachtregel. Voorbeeldlagen zijn Heap, Ingangen of Vergrendelingen.
U kunt LAYER instellen op * om op te geven dat de opdracht van toepassing is op alle lagen.
TARGET is een binaire naam (bijvoorbeeld notepad.exe). Dit is een statische instelling die wordt bewaard in het register en wordt in overweging genomen wanneer de toepassing wordt gestart. Voor de opdracht appverif -disable kunt u TARGET instellen op * om op te geven dat alle doelen moeten worden uitgeschakeld.
EIGENSCHAP is de eigenschapsnaam die specifiek is voor de LAAG die wordt vermeld in de opdrachtregel. De laag Handles heeft bijvoorbeeld traceringen als eigenschap.
VALUE is een waarde voor de eigenschap. Het type van de waarde is afhankelijk van het type dat is gekoppeld aan de eigenschap en wordt afgedwongen. De ondersteunde typen zijn: booleaanse waarde (waar/onwaar), geheel getal (decimal/octaal/hex in C-notatie), tekenreeks en meerdere tekenreeksen (met \0’ between strings and being terminated by \0\0'). Als WAARDE niet is opgegeven, betekent dit dat de gebruiker die eigenschap wil verwijderen en het gedrag van de standaardwaarde voor de eigenschap wil terugzetten.
STOP is het getal (decimaal of hex in C-notatie) van het probleem met de verifier-stop dat moet worden geconfigureerd. De stopcodes moeten uniek zijn (er kunnen geen twee lagen dezelfde stopcode gebruiken, daarom bepaalt het hulpprogramma zelf tot welke laag de stop behoort)
STOPPROPERTY is een eigenschapsnaam die acceptabel is voor verificatorstops. Als de waarde niet is opgegeven, wordt ervan uitgegaan dat de eigenschap moet worden verwijderd. De toegestane eigenschappen voor stops zijn (zie Hieronder voor meer informatie de configuratie van verifierstops):
- Foutrapport
- Ernstigheid
- Smaak
De eigenschappen kunnen desgewenst worden gekwalificeerd door de laag waartoe ze behoren. Dit is echter niet nodig als met de opdrachtregel slechts één laag wordt ingeschakeld. Als u bijvoorbeeld twee lagen met de naam X en Y wilt inschakelen voor doel-test.exe met eigenschappen X.DebugLevel en Y.DebugLevel, is de opdracht:
appverif –enable X Y –for test.exe –with X.DebugLevel=1 Y.DebugLevel=2
Als laag X echter is ingeschakeld, kan een niet-gekwalificeerde eigenschapsnaam worden gebruikt:
appverif –enable X –for test.exe –with DebugLevel=1
Het scheidingsteken tussen de eigenschapsnaam en de waarde kan worden = (gelijkteken) of : (dubbele punt).
Diverse opdrachten
appverif –query providers
appverif –delete logs –for TARGET ...
appverif –delete settings –for TARGET ...
Wis volledig TARGET uit het register.
appverif –stamp log –for Target –with Stamp=”LOG_STAMP”[Log= RELATIVE_TO_LAST_INDEX]
Met deze opdracht wordt het logboek gestempeld met LOG_STAMP. Deze stempel is handig om alleen een sectie van een logboek te identificeren die relevant is bij het weergeven van het logboek in XML-formulier.
appverif –export log –for TARGET –with To=XML_FILE[Symbols=SYMBOL_PATH][Stamp=LOG_STAMP][StampTo=LOG_STAMP][Log=RELATIVE_TO_LAST_INDEX]
Met de bovenstaande opdracht wordt een binair logboek geëxporteerd naar een XML-bestand. De optionele eigenschap Stempel wordt gebruikt om te bepalen welk deel van het logboek moet worden geëxporteerd naar XML. Als dit niet is opgegeven, wordt het hele logboek geconverteerd. De eigenschap Logboek heeft een negatief geheel getal als mogelijke waarde en geeft aan welk logboekbestand moet worden geconverteerd vanaf de laatste waarde (wordt ervan uitgegaan dat de eigenschap niet aanwezig is). Start bijvoorbeeld notepad.exe drie keer achter elkaar. Geef Log=-2 op in de opdrachtregel om toegang te krijgen tot het eerste logboek dat is gemaakt.
Snelkoppelingen voor opdrachtregel
Hieronder volgen snelkoppelingen:
appverif /verify TARGET [/faults [PROBABILITY [TIMEOUT [DLL …]]]]
waarbij geldt:
TARGET heeft dezelfde betekenis als hierboven beschreven.
KANS is de kans om fouten te injecteren. Moet een waarde zijn in het bereik 0,.10000000. Als de standaardwaarde niet is opgegeven, is 5%.
TIMEOUT is het tijdsinterval in milliseconden tijdens het opstarten van het proces wanneer foutinjectie niet plaatsvindt. Dit wordt gedaan om toe te staan dat het proces correct kan worden opgestart voordat er fouten optreden. Als niet is opgegeven, is de waarde 500 msec.
DLL is de naam van de module die in het proces wordt geladen. Dit is meestal de naam van een dynamische bibliotheek (extensie .dll), maar kan een ActiveX (extensie .ocx) of een andere laadbare module zijn.
Voorbeelden:
appverif /verify notepad.exe /faults 100000 1000 msvcrt.dll
Schakel foutinjectie in voor notepad.exe (wanneer deze wordt gestart). Fouten moeten optreden met waarschijnlijkheid 10%, slechts 1000 msec nadat het proces is gestart en alleen voor bewerkingen die zijn gestart vanaf msvcrt.dll.
Details van foutinjectie inschakelen
Met behulp van de opdrachtregel /faults schakelt u foutinjectie alleen in voor OLE_ALLOC en HEAP_ALLOC. U kunt echter de opdrachtregel gebruiken om te configureren welk type foutinjectie u wilt inschakelen. Als u bijvoorbeeld een fout wilt injecteren in een register- of bestands-API als 2%, gebruikt u de opdrachtregel:
appverif -enable lowres -for hello.exe -with registry=20000 file=20000
Nog een voorbeeld:
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
Verifierstops configureren
Met behulp van de opdrachtregel (of gebruikersinterface) kunt u verifierstops configureren. Hieronder volgen enkele voorbeelden die u kunt gebruiken:
Appverif -configure STOP ... -for TARGET ... -with PROPERTY=VALUE ...
STOP is stopcode zoals 0x200 0x201
TARGET is de naam van de toepassing, zoals foo.exe
EIGENSCHAP kan een van de 'ErrorReport', 'Ernst' en 'Smaak' zijn
Voor het ErrorReport kan VALUE de combinatie van de volgende waarden zijn.
0x00000001 betekent dat de stop actief is. (Als deze bit nul is, betekent dit dat de stop is uitgeschakeld)
0x00000020 betekent dat de stop wordt opgesplitst in het foutopsporingsprogramma met behulp van een onderbrekingspunt.
0x00000040 betekent dat de stop in het foutopsporingsprogramma wordt onderbroken door een verifier-uitzondering te genereren.
0x00000080 betekent dat de stop wordt geregistreerd in het logboekbestand.
0x00000100 betekent dat de stack-trace voor deze stop wordt geregistreerd in het logboekbestand.
Voor de ernst kan WAARDE een van de volgende zijn.
0x00000003 informatieve stop.
0x0000000F waarschuwing.
0x0000003F fout.
Voor smaak kan waarde de combinatie van de volgende waarden zijn.
0x00000002 niet-continue stop.
0x00000010 Deze stop wordt slechts één keer weergegeven. De testuitvoering wordt de volgende tijd genegeerd.
Schakel bijvoorbeeld stopt 0x2700 uit, 0x2701 voor foo.exe
Appverif –configure 0x2700 0x2701 –for foo.exe –with ErrorReport=0
Stopcode configureren 0x2700 als het inbreken van foutopsporingsprogramma (deze is standaard uitgeschakeld), het opslaan van een logboek zonder stacktracering en het niet-continu maken
Appverif –configure 0x2700 –for foo.exe –with ErrorReport=0xA1 Flavor=0x2
Opties voor stoppen van verifier - Geavanceerde instellingen
Toepassingsverificator heeft geavanceerde instellingen, zoals Inactivaat, die u per verifierstop kunt wijzigen.
Opties voor stopopties voor Access Verifier- Verifier-stop worden gewijzigd in een dialoogvenster met de beschikbare opties. Ga als volgende te werk om toegang te krijgen tot de opties voor het stoppen van verificatoren:
- Selecteer de naam van een test in het deelvenster Tests.
- Selecteer In het menu Bewerken opties voor verifier stoppen of klik met de rechtermuisknop op de test en selecteer Opties voor Verifier-stop.
Opties voor einde van verifier
U kunt de volgende elementen per verificatorstop wijzigen door op de stopcode te klikken (houd er rekening mee dat er een beschrijving van de stop wordt weergegeven wanneer erop wordt geklikt).
Inactief is een selectievakje dat wanneer deze optie is ingeschakeld, de verifier stopt dat de code wordt uitgevoerd.
Ernst bepaalt hoe de verificatorstop moet worden gemarkeerd:
- Negeren
- Gegevens
- Waarschuwing
- Fout
Foutrapportage bepaalt hoe u wilt dat de specifieke verifierstop wordt gerapporteerd/geregistreerd:
Log to File - een selectievakje dat wanneer geselecteerd wordt aangemeld bij het aangewezen bestand.
Logboekstacktracering: een selectievakje dat, wanneer geselecteerd, de stacktraceringen worden vastgelegd wanneer ze beschikbaar zijn.
Geen onderbreking: een optie om niet te breken in het foutopsporingsprogramma.
Uitzondering: een optie zonder onderbrekings- en onderbrekingspunt
Onderbrekingspunt: een optie zonder onderbreking of uitzondering.
Diversen biedt twee opties
Eenmaal stoppen: een selectievakje dat, wanneer deze optie is geselecteerd, slechts eenmaal op die fout stopt bij het testen van een toepassing.
Not Continuable - een selectievakje dat u niet kunt doorgaan zonder te onderzoeken.
Zie ook
Application Verifier - Overzicht
Application Verifier - Functies
Application Verifier - Tests binnen toepassingsverificator
toepassingsverificator : codes en definities stoppen
Toepassingsverifier - Foutopsporing van toepassingsverificator stopt