Delen via


Toepassingen traceren en instrumenteren

Notitie

Dit artikel is specifiek voor .NET Framework. Dit geldt niet voor nieuwere implementaties van .NET, waaronder .NET 6 en nieuwere versies.

Tracering is een methode waarmee u de uitvoering van uw toepassing kunt bewaken terwijl deze wordt uitgevoerd. U kunt tracerings- en foutopsporingsinstrumentatie toevoegen aan uw .NET Framework-toepassing wanneer u deze ontwikkelt en u kunt deze instrumentatie gebruiken, zowel tijdens het ontwikkelen van de toepassing als nadat u deze hebt geïmplementeerd. U kunt de System.Diagnostics.Trace, System.Diagnostics.Debugen System.Diagnostics.TraceSource klassen gebruiken om informatie vast te leggen over fouten en de uitvoering van toepassingen in logboeken, tekstbestanden of andere apparaten voor latere analyse.

De term instrumentatie verwijst naar een mogelijkheid om het prestatieniveau van een product te bewaken of te meten en fouten te diagnosticeren. In programmeren betekent dit de mogelijkheid van een toepassing om het volgende op te nemen:

  • Codetracering : informatieve berichten ontvangen over de uitvoering van een toepassing tijdens runtime.

  • Foutopsporing : programmeerfouten in een toepassing die wordt ontwikkeld en opgelost. Zie Foutopsporing voor meer informatie.

  • Prestatiemeteritems : onderdelen waarmee u de prestaties van uw toepassing kunt bijhouden. Zie Prestatiemeteritems voor meer informatie.

  • Gebeurtenislogboeken : onderdelen waarmee u belangrijke gebeurtenissen kunt ontvangen en bijhouden bij de uitvoering van uw toepassing. Zie de EventLog klas voor meer informatie.

Het instrumenteren van uw toepassing door traceringsinstructies op strategische locaties in uw code te plaatsen, is vooral handig voor gedistribueerde toepassingen. Met behulp van traceringsinstructies kunt u een toepassing niet alleen instrumenteren om informatie weer te geven wanneer er iets misgaat, maar ook om te controleren hoe goed de toepassing presteert.

De TraceSource klasse biedt verbeterde traceringsfuncties en kan worden gebruikt in plaats van de statische methoden van de oudere Trace klassen en Debug traceringsklassen. De vertrouwde Trace en Debug klassen worden nog veel gebruikt, maar de TraceSource klasse wordt aanbevolen voor nieuwe traceringsopdrachten, zoals TraceEvent en TraceData.

De Trace en Debug klassen zijn identiek, behalve dat procedures en functies van de Trace klasse standaard worden gecompileerd in release-builds, maar die van de Debug klasse niet.

De Trace en Debug klassen bieden de middelen voor het bewaken en onderzoeken van de prestaties van toepassingen tijdens de ontwikkeling of na de implementatie. U kunt bijvoorbeeld de Trace klasse gebruiken om bepaalde typen acties in een geïmplementeerde toepassing bij te houden wanneer deze zich voordoen (bijvoorbeeld het maken van nieuwe databaseverbindingen) en kan daarom de efficiëntie van de toepassing bewaken.

Codetracering en foutopsporing

Tijdens de ontwikkeling kunt u de uitvoermethoden van de Debug klasse gebruiken om berichten weer te geven in het uitvoervenster van de IDE (Integrated Development Environment) van Visual Studio. Voorbeeld:

Trace.WriteLine("Hello World!")
Debug.WriteLine("Hello World!")
System.Diagnostics.Trace.WriteLine("Hello World!");
System.Diagnostics.Debug.WriteLine("Hello World!");

In elk van deze voorbeelden wordt 'Hallo wereld!' weergegeven in het uitvoervenster wanneer de toepassing wordt uitgevoerd in het foutopsporingsprogramma.

Hierdoor kunt u fouten opsporen in uw toepassingen en hun prestaties optimaliseren op basis van hun gedrag in uw testomgeving. U kunt fouten opsporen in uw toepassing in uw foutopsporingsbuild met het Debug voorwaardelijke kenmerk ingeschakeld, zodat u alle foutopsporingsuitvoer ontvangt. Wanneer uw toepassing klaar is voor release, kunt u de release-build compileren zonder het Debug voorwaardelijke kenmerk in te schakelen, zodat de compiler uw foutopsporingscode niet in het uiteindelijke uitvoerbare bestand opneemt. Zie How to: Compileer voorwaardelijk met tracering en foutopsporing voor meer informatie. Zie Compiling and Building voor meer informatie over verschillende buildconfiguraties voor uw toepassing.

U kunt de uitvoering van code ook traceren in een geïnstalleerde toepassing met behulp van methoden van de Trace klasse. Door Trace Switches in uw code te plaatsen, kunt u bepalen of tracering plaatsvindt en hoe uitgebreid het is. Hiermee kunt u de status van uw toepassing in een productieomgeving bewaken. Dit is vooral belangrijk in een bedrijfstoepassing die gebruikmaakt van meerdere onderdelen die op meerdere computers worden uitgevoerd. U kunt bepalen hoe de switches worden gebruikt na de implementatie via het configuratiebestand. Zie Procedure: Traceringsswitches maken, initialiseren en configureren voor meer informatie.

Wanneer u een toepassing ontwikkelt waarvoor u tracering wilt gebruiken, neemt u meestal zowel tracerings- als foutopsporingsberichten op in de toepassingscode. Wanneer u klaar bent om de toepassing te implementeren, kunt u de release-build compileren zonder het kenmerk Voorwaardelijke foutopsporing in te schakelen. U kunt echter het voorwaardelijke kenmerk Trace inschakelen, zodat de compiler uw traceringscode in het uitvoerbare bestand bevat. Zie How to: Compileer voorwaardelijk met tracering en foutopsporing voor meer informatie.

Fasen van codetracering

Er zijn drie fasen van codetracering:

  1. Instrumentatie : u voegt traceringscode toe aan uw toepassing.

  2. Tracering : de traceringscode schrijft informatie naar het opgegeven doel.

  3. Analyse : u evalueert de traceringsgegevens om problemen in de toepassing te identificeren en te begrijpen.

Tijdens de ontwikkeling schrijven alle uitvoermethoden voor foutopsporing en tracering standaard informatie naar het uitvoervenster in Visual Studio. In een geïmplementeerde toepassing schrijven de methoden traceringsgegevens naar de doelen die u opgeeft. Zie Trace-listeners voor meer informatie over het opgeven van een uitvoerdoel voor tracering of foutopsporing.

Hier volgt een algemeen overzicht van de belangrijkste stappen die doorgaans worden gebruikt bij het gebruik van tracering om mogelijke problemen in geïmplementeerde toepassingen te analyseren en te corrigeren. Zie de juiste koppeling voor meer informatie over het uitvoeren van deze stappen.

Tracering gebruiken in een toepassing
  1. Bedenk welke traceringsuitvoer u op locatie wilt ontvangen nadat u de toepassing hebt geïmplementeerd.

  2. Maak een set schakelopties. Zie Instructies voor het configureren van traceringsswitches voor meer informatie.

  3. Voeg de traceringsinstructies toe aan de toepassingscode.

  4. Bepaal waar u de traceringsuitvoer wilt weergeven en voeg de juiste listeners toe. Zie Trace Listeners maken en initialiseren voor meer informatie.

  5. Test en foutopsporing in uw toepassing en de traceringscode die deze bevat.

  6. Compileer de toepassing in uitvoerbare code met behulp van een van de volgende procedures:

    • Gebruik het menu Opbouwen samen met de pagina Foutopsporing van het dialoogvenster Eigenschappenpagina's in Solution Explorer. Gebruik deze optie bij het compileren in Visual Studio.

      - of -

    • Gebruik de instructies voor tracering en foutopsporing van compileren voor de opdrachtregelmethode voor het compileren. Zie Compiling conditionally with Trace and Debug voor meer informatie. Gebruik deze optie bij het compileren vanaf de opdrachtregel.

  7. Als er een probleem optreedt tijdens de runtime, schakelt u de juiste traceringsswitch in. Zie TraceErswitches configureren voor meer informatie.

    De traceringscode schrijft traceringsberichten naar een opgegeven doel, bijvoorbeeld een scherm, een tekstbestand of een gebeurtenislogboek. Het type listener dat u in de Trace.Listeners verzameling hebt opgenomen, bepaalt het doel.

  8. Analyseer de traceringsberichten om het probleem in de toepassing te identificeren en te begrijpen.

Instrumentatie en gedistribueerde toepassingen traceren

Wanneer u een gedistribueerde toepassing maakt, kan het lastig zijn om de toepassing te testen op de manier waarop deze wordt gebruikt. Weinig ontwikkelteams hebben de mogelijkheid om alle mogelijke combinaties van besturingssystemen of webbrowsers te testen (inclusief alle gelokaliseerde taalopties) of om het grote aantal gebruikers te simuleren dat tegelijkertijd toegang heeft tot de toepassing. Onder deze omstandigheden kunt u niet testen hoe een gedistribueerde toepassing reageert op grote volumes, verschillende instellingen en uniek gedrag van eindgebruikers. Bovendien hebben veel onderdelen van een gedistribueerde toepassing geen gebruikersinterface waarmee u rechtstreeks kunt communiceren of de activiteit van deze onderdelen kunt bekijken.

U kunt dit echter compenseren door gedistribueerde toepassingen in staat te stellen bepaalde gebeurtenissen te beschrijven die interessant zijn voor systeembeheerders, met name wat er misgaat, door de toepassing te instrumenteren , dat wil zeggen door traceringsinstructies op strategische locaties in uw code te plaatsen. Als er dan iets onverwachts optreedt tijdens de uitvoering (bijvoorbeeld overmatige trage reactietijd), kunt u de waarschijnlijke oorzaak bepalen.

Met traceringsinstructies kunt u de moeilijke taak voorkomen om de oorspronkelijke broncode te controleren, deze te wijzigen, opnieuw te compileren en de runtimefout in de foutopsporingsomgeving te produceren. Houd er rekening mee dat u een toepassing niet alleen kunt instrumenteren om fouten weer te geven, maar ook om de prestaties te bewaken.

Strategische plaatsing van traceringsinstructies

U moet speciale zorg uitoefenen bij het plaatsen van uw traceringsinstructies voor gebruik tijdens runtime. U moet overwegen welke traceringsgegevens waarschijnlijk nodig zijn in een geïmplementeerde toepassing, zodat alle waarschijnlijke traceringsscenario's adequaat worden behandeld. Omdat toepassingen die gebruikmaken van tracering sterk variëren, zijn er echter geen algemene richtlijnen voor strategische plaatsing van tracering. Zie Instructies voor het toevoegen van traceringsinstructies aan toepassingscode voor meer informatie over het plaatsen van traceringsinstructies.

Uitvoer van tracering

Traceringsuitvoer wordt verzameld door objecten die listeners worden genoemd. Een listener is een object dat traceringsuitvoer ontvangt en naar een uitvoerapparaat schrijft (meestal een venster, logboek of tekstbestand). Wanneer een traceringslistener wordt gemaakt, wordt deze doorgaans toegevoegd aan de Trace.Listeners verzameling, zodat de listener alle traceringsuitvoer kan ontvangen.

Traceringsgegevens worden altijd ten minste naar het standaarduitvoerdoel Trace geschreven, de DefaultTraceListener. Als u om een of andere reden de DefaultTraceListener verzameling hebt verwijderd zonder andere listeners toe te Listeners voegen, ontvangt u geen traceringsberichten. Zie Trace Listeners voor meer informatie.

De zes Debug leden en Trace methoden voor het schrijven van traceringsgegevens worden vermeld in de volgende tabel.

Wijze Uitvoer
Assert De opgegeven tekst; of, als er geen is opgegeven, de aanroepstack. De uitvoer wordt alleen geschreven als de voorwaarde die is opgegeven als een argument in de Assert instructie onwaar is.
Fail De opgegeven tekst; of, als er geen is opgegeven, de aanroepstack.
Write De opgegeven tekst.
WriteIf De opgegeven tekst, als aan de voorwaarde in de WriteIf instructie is voldaan.
WriteLine De opgegeven tekst en een regelterugloop.
WriteLineIf De opgegeven tekst en een regelterugloop, als aan de voorwaarde in de WriteLineIf instructie is voldaan.

Alle listeners in de Listeners verzameling ontvangen de berichten die in de bovenstaande tabel worden beschreven, maar de uitgevoerde acties kunnen variëren, afhankelijk van het type listener dat het bericht ontvangt. In het DefaultTraceListener dialoogvenster wordt bijvoorbeeld een bevestigingsdialoogvenster weergegeven wanneer er een Fail of meer mislukte Assert meldingen worden ontvangen, maar de TextWriterTraceListener uitvoer wordt gewoon naar de stream geschreven.

U kunt aangepaste resultaten produceren door uw eigen listener te implementeren. Een aangepaste traceringslistener kan bijvoorbeeld de berichten weergeven in een berichtvak of verbinding maken met een database om berichten aan een tabel toe te voegen. Alle aangepaste listeners moeten de zes hierboven genoemde methoden ondersteunen. Zie de naslaginformatie over .NET Framework voor meer informatie over het maken van door ontwikkelaars gedefinieerde listeners TraceListener .

De Write en WriteLine methoden schrijven altijd de tekst die u opgeeft. Assert, WriteIfen WriteLineIf vereisen een Booleaanse argument waarmee wordt bepaald of ze de opgegeven tekst schrijven; ze schrijven de opgegeven tekst alleen als de expressie waar is (voor WriteIf enWriteLineIf) of onwaar (voorAssert). De Fail methode schrijft altijd de opgegeven tekst. Zie Instructies: Traceringsinstructies toevoegen aan toepassingscode en de .NET Framework-verwijzing voor meer informatie.

Beveiligingsproblemen

Als u tracering en foutopsporing niet uitschakelt voordat u een ASP.NET-toepassing implementeert, kan uw toepassing informatie over zichzelf onthullen die kan worden misbruikt door een schadelijk programma. Zie Instructies voor meer informatie : Voorwaardelijke compileren met tracering en foutopsporing, compilatie en bouwen, en procedures: Traceringsswitches maken, initialiseren en configureren. Foutopsporing kan ook worden geconfigureerd via IIS (Internet Information Services).

Zie ook