Dela via


Intyg i hanterad kod

En kontroll, eller Assert-instruktion, testar ett villkor, som du anger som ett argument till Assert-instruktionen. Om villkoret utvärderas till sant, utförs ingen åtgärd. Om villkoret utvärderas till falskt, misslyckas kontrollen. Om du kör med en felsökningsversion går programmet in i pausläge.

I det här avsnittet

Påståenden i namnområdet System.Diagnostics

Metoden Debug.Assert

Biverkningar av Debug.Assert

Krav för spårning och felsökning

Assert-argument

Anpassa Assert-beteende

Att ställa in uttryck i konfigurationsfiler

Påståenden i namnområdet System.Diagnostics

I Visual Basic och Visual C# kan du använda Assert metoden från antingen Debug eller Trace, som finns i System.Diagnostics namnområdet. Debug klassmetoder ingår inte i en slutversion av ditt program, så de ökar inte storleken eller minskar hastigheten på koden i slutversionen.

C++ stöder inte klassmetoderna Debug . Du kan uppnå samma effekt med hjälp Trace av klassen med villkorsstyrd kompilering, till exempel #ifdef DEBUG... #endif.

I det här avsnittet

Metoden Debug.Assert

Använd metoden System.Diagnostics.Debug.Assert fritt för att testa villkor som ska gälla om koden är korrekt. Anta till exempel att du har skrivit en heltalsdelningsfunktion. Enligt matematikens regler kan divisorn aldrig vara noll. Du kan testa detta med hjälp av en försäkran:

int IntegerDivide ( int dividend , int divisor )
{
    Debug.Assert ( divisor != 0 );
    return ( dividend / divisor );
}

När du kör den här koden under felsökningsprogrammet utvärderas kontrolluttrycket, men i release-versionen görs inte jämförelsen, så det förekommer ingen ytterligare belastning.

Här är ett annat exempel. Du har en klass som implementerar ett kontrollkonto enligt följande:

float balance = savingsAccount.Balance;
Debug.Assert ( amount <= balance );
savingsAccount.Withdraw ( amount );

Innan du tar ut pengar från kontot vill du se till att kontosaldot är tillräckligt för att täcka det belopp som du förbereder att ta ut. Du kan skriva en försäkran för att kontrollera saldot:

float balance = savingsAccount.Balance;
Trace.Assert ( amount <= balance );
savingsAccount.Withdraw ( amount );

Observera att anrop av metoden System.Diagnostics.Debug.Assert försvinner när du skapar en releaseversion av din kod. Det innebär att anropet som kontrollerar saldot försvinner i releaseversionen. För att lösa det här problemet bör du ersätta System.Diagnostics.Debug.Assert med System.Diagnostics.Trace.Assert, vilket inte försvinner i släppversionen.

Samtal till System.Diagnostics.Trace.Assert ökar omkostnaderna i din utgivningsversion, till skillnad från samtal till System.Diagnostics.Debug.Assert.

I det här avsnittet

Biverkningar av Debug.Assert

När du använder System.Diagnostics.Debug.Assertkontrollerar du att någon kod inuti Assert inte ändrar programmets resultat om Assert den tas bort. Annars kan du oavsiktligt introducera en bugg som bara visas i Release-versionen av ditt program. Var särskilt försiktig med påståenden som innehåller funktions- eller proceduranrop, till exempel:

// unsafe code
Debug.Assert (meas(i) != 0 );

Den här användningen av System.Diagnostics.Debug.Assert kan verka säker vid första anblicken, men anta att funktionen meas uppdaterar en räknare varje gång den anropas. När du skapar releaseversionen elimineras detta anrop till meas, så att räknaren inte uppdateras. Detta är ett exempel på en funktion med en bieffekt. Om du eliminerar ett anrop till en funktion som har bieffekter kan det leda till en bugg som bara visas i produktionsversionen. Undvik sådana problem genom att inte placera funktionsanrop i en System.Diagnostics.Debug.Assert instruktion. Använd en tillfällig variabel i stället:

temp = meas( i );
Debug.Assert ( temp != 0 );

Även när du använder System.Diagnostics.Trace.Assertkanske du fortfarande vill undvika att placera funktionsanrop i en Assert -instruktion. Sådana anrop bör vara säkra eftersom System.Diagnostics.Trace.Assert -instruktioner inte elimineras i en versionsversion. Men om du undviker sådana konstruktioner som en vana är det mindre troligt att du gör ett misstag när du använder System.Diagnostics.Debug.Assert.

I det här avsnittet

Krav för spårning och felsökning

Om du skapar projektet med hjälp av Visual Studio-guiderna definieras TRACE-symbolen som standard i både versions- och felsökningskonfigurationer. DEBUG-symbolen definieras som standard endast i felsökningsversionen.

Annars måste programmet ha något av följande överst i källfilen för att Trace metoderna ska fungera.

Hävda argument

System.Diagnostics.Trace.Assert och System.Diagnostics.Debug.Assert kan ta emot upp till tre argument. Det första argumentet, som är obligatoriskt, är det villkor som du vill kontrollera. Om du anropar System.Diagnostics.Trace.Assert(Boolean) eller System.Diagnostics.Debug.Assert(Boolean) bara har ett argument Assert kontrollerar metoden villkoret och, om resultatet är falskt, matar ut innehållet i anropsstacken till utdatafönstret . I följande exempel visas System.Diagnostics.Trace.Assert(Boolean) och System.Diagnostics.Debug.Assert(Boolean):

Debug.Assert ( stacksize > 0 );
Trace.Assert ( stacksize > 0 );

De andra och tredje argumenten, om de finns, måste vara strängar. Om du anropar System.Diagnostics.Trace.Assert eller System.Diagnostics.Debug.Assert med två eller tre argument är det första argumentet ett villkor. Metoden kontrollerar villkoret och, om resultatet är falskt, matar den ut den andra och tredje strängarna. Följande exempel visar System.Diagnostics.Debug.Assert(Boolean, String) och System.Diagnostics.Trace.Assert(Boolean, String) används med två argument:

Debug.Assert ( stacksize > 0, "Out of stack space" );
Trace.Assert ( stacksize > 0, "Out of stack space" );

Följande exempel visar System.Diagnostics.Debug.Assert(Boolean, String, String) och System.Diagnostics.Trace.Assert(Boolean, String, String) används med tre argument:

Debug.Assert ( stacksize > 100, "Out of stack space" , "Failed in inctemp" );
Trace.Assert ( stacksize > 0, "Out of stack space", "Failed in inctemp" );

I det här avsnittet

Anpassa Assert-beteende

Om du kör programmet i användargränssnittsläge Assert visar metoden dialogrutan Försäkran misslyckades när villkoret misslyckas. De åtgärder som inträffar när en försäkran misslyckas styrs av Listeners egenskapen eller Listeners .

Du kan anpassa utdatabeteendet genom att lägga till ett TraceListener objekt i Listeners samlingen, genom att ta bort ett TraceListener från Listeners samlingen eller genom att System.Diagnostics.TraceListener.Fail åsidosätta metoden för en befintlig TraceListener så att den fungerar annorlunda.

Du kan till exempel åsidosätta System.Diagnostics.TraceListener.Fail metoden för att skriva till en händelselogg i stället för att visa dialogrutan Försäkran misslyckades .

Om du vill anpassa utdata på det här sättet måste programmet innehålla en lyssnare och du måste ärva från TraceListener och åsidosätta dess System.Diagnostics.TraceListener.Fail metod.

Mer information finns i Spåra lyssnare.

I det här avsnittet

Ange uttryck i konfigurationsfiler

Du kan ange kontroller i programkonfigurationsfilen och i koden. Mer information finns i System.Diagnostics.Trace.Assert eller System.Diagnostics.Debug.Assert.