Delen via


Codetoewijzingen gebruiken om fouten in uw toepassingen op te sporen

Met codetoewijzingen in Visual Studio kunt u voorkomen dat u kwijtraakt in grote codebases, onbekende code of verouderde code. Wanneer u bijvoorbeeld foutopsporing uitvoert, moet u mogelijk code bekijken in veel bestanden en projecten. Gebruik codetoewijzingen om door stukjes code te navigeren en inzicht te hebben in de relaties ertussen. Op die manier hoeft u deze code niet in uw hoofd bij te houden of een afzonderlijk diagram te tekenen. Dus wanneer uw werk wordt onderbroken, helpen codetoewijzingen u bij het vernieuwen van uw geheugen over de code waaraan u werkt.

Codekaart - Relaties in code in kaart brengen

Een groene pijl laat zien waar de cursor wordt weergegeven in de editor

Zie Codeoverzichten bekijken en opnieuw rangschikken voor meer informatie over de opdrachten en acties die u kunt gebruiken bij het werken met codekaarten.

Meer informatie over foutopsporing in Visual Studio met het hulpprogramma Debugger.

Opmerking

Als u codemaps wilt maken en bewerken, hebt u Visual Studio Enterprise Edition nodig. In visual Studio Community- en Professional-edities kunt u diagrammen openen die zijn gegenereerd in Enterprise Edition, maar u kunt ze niet bewerken.

Het probleem begrijpen

Stel dat er een fout optreedt in een tekenprogramma waaraan u werkt. Als u de fout wilt reproduceren, opent u de oplossing in Visual Studio en drukt u op F5 om foutopsporing te starten.

Wanneer u een lijn tekent en Mijn laatste streek ongedaan maken kiest, gebeurt er niets, totdat u de volgende lijn tekent.

Codemap - Repro-bug

U begint te onderzoeken door te zoeken naar de Undo methode. Je vindt het in de PaintCanvas klas.

Codekaart - Code zoeken

Begin met het in kaart brengen van de code

Begin nu met het toewijzen van de undo methode en de bijbehorende relaties. Vanuit de code-editor voegt u de undo methode en de velden waarnaar deze verwijst toe aan een nieuwe codekaart. Wanneer u een nieuwe kaart maakt, kan het enige tijd duren om de code te indexeren. Dit helpt latere bewerkingen sneller te worden uitgevoerd.

Codekaart - Methode en gerelateerde velden weergeven

Aanbeveling

De groene markering toont de laatste items die aan de kaart zijn toegevoegd. De groene pijl toont de positie van de cursor in de code. Pijlen tussen items vertegenwoordigen verschillende relaties. U kunt meer informatie over items op de kaart krijgen door de muis over de items te bewegen en de knopinfo te bekijken.

Codekaart - Knopinfo weergeven

Als u de codedefinitie voor elk veld wilt zien, dubbelklikt u op het veld op de kaart of selecteert u het veld en drukt u op F12. De groene pijl wordt verplaatst tussen items op de kaart. De cursor in de code-editor wordt ook automatisch verplaatst.

Schermopname van een codeoverzichtvenster met het geschiedenisveld geselecteerd en een venster van de code-editor waarin alle exemplaren van de geschiedenis zijn gemarkeerd.

Schermopname van een venster met het paintObjects-veld geselecteerd en een venster van de code-editor waarin alle exemplaren van paintObjects zijn gemarkeerd.

Aanbeveling

U kunt ook de groene pijl op de kaart verplaatsen door de cursor in de code-editor te verplaatsen.

Relaties tussen stukjes code begrijpen

Nu wilt u weten welke andere code communiceert met de history en paintObjects velden. U kunt alle methoden die naar deze velden verwijzen aan de map toevoegen. U kunt dit doen vanaf de kaart of vanuit de code-editor.

Codeoverzicht - Alle verwijzingen zoeken

Een codeoverzicht openen vanuit de code-editor

Opmerking

Als u items toevoegt uit een project dat wordt gedeeld in meerdere apps, zoals Windows Phone of Windows Store, worden deze items altijd weergegeven met het huidige actieve app-project op de kaart. Dus als u de context wijzigt in een ander app-project, wordt de context op de kaart ook gewijzigd voor nieuwe toegevoegde items uit het gedeelde project. Bewerkingen die u uitvoert met een item op de kaart, zijn alleen van toepassing op items die dezelfde context delen.

Wijzig de indeling om de stroom van relaties opnieuw te rangschikken en de kaart beter leesbaar te maken. U kunt items ook over de kaart verplaatsen door ze te slepen.

Schermopname van een codeoverzichtvenster met het menu Indeling geopend en de opdracht Links naar Rgiht geselecteerd.

Aanbeveling

Incrementele indeling is standaard ingeschakeld. Hierdoor wordt de kaart zo weinig mogelijk opnieuw gerangschikt wanneer u nieuwe items toevoegt. Als u de hele kaart opnieuw wilt rangschiknen telkens wanneer u nieuwe items toevoegt, schakelt u Incrementele indeling uit.

Schermopname van een codeoverzichtvenster met de relatieshiop-pijlen tussen de velden die van links naar rechts wijzen.

Laten we deze methoden eens bekijken. Dubbelklik op de kaart op de methode PaintCanvas of selecteer deze methode en druk op F12. U leert dat deze methode history en paintObjects als lege lijsten maakt.

Schermopname van een codekaartvenster met de Methode PaintCanvas geselecteerd en een afbeelding van een codefragment met de naam van de PainCanvas-methode gemarkeerd.

Herhaal nu dezelfde stappen om de clear methodedefinitie te onderzoeken. U leert dat clear enkele taken uitvoert met paintObjects en history. Vervolgens wordt de Repaint methode aangeroepen.

Schermopname van een codeoverzichtvenster met de methode Clear geselecteerd en een afbeelding van een codefragment met de code voor de Clear-methode.

Bekijk nu de addPaintObject methodedefinitie. Er worden ook enkele taken uitgevoerd met history en paintObjects. Het roept ook Repaint.

Schermopname van een codetoewijzingsvenster met de methode addPaintObject geselecteerd en een afbeelding van een codefragment met de code voor de methode addPaintObject.

Het probleem vinden door de kaart te bekijken

Het lijkt erop dat alle methoden die wijzigen history en paintObjects aanroepen Repaint. Maar de undo-methode roept Repaint niet aan, ook al wijzigt undo dezelfde velden. U denkt dat u dit probleem kunt oplossen door te bellen Repaint van undo.

Codekaart - Ontbrekende methode-aanroep zoeken

Als u geen kaart hebt om u deze ontbrekende aanroep te laten zien, is het mogelijk moeilijker om dit probleem te vinden, met name met complexere code.

Uw detectie en volgende stappen delen

Voordat u of iemand anders deze fout oplost, kunt u notities maken op de kaart over het probleem en hoe u dit kunt oplossen.

Codekaart - Item opmerken en markeren voor opvolging

U kunt bijvoorbeeld opmerkingen toevoegen aan de kaart en items markeren met behulp van kleuren.

Codekaart - Gecommenteerde en aangemerkte items

Als u Microsoft Outlook hebt geïnstalleerd, kunt u de kaart naar anderen e-mailen. U kunt de kaart ook exporteren als een afbeelding of een andere indeling.

Codekaart - Delen, exporteren, e-mail

Los het probleem op en laat zien wat u hebt gedaan

Voeg om deze fout op te lossen de aanroep voor Repaint toe aan undo.

Codekaart - Ontbrekende methode-aanroep toevoegen

Om uw oplossing te bevestigen, start u de foutopsporingssessie opnieuw en probeert u de fout te reproduceren. Als u nu mijn laatste handeling ongedaan maken kiest, werkt het zoals verwacht en bevestigt u dat u de correcte wijziging hebt aangebracht.

Codelandkaart - Bevestig codeherstel

U kunt de kaart bijwerken om de oplossing weer te geven die u hebt gemaakt.

Codekaart - Kaart bijwerken met ontbrekende methode-aanroep

Uw kaart toont nu een koppeling tussen ongedaan maken en Opnieuw schilderen.

Codekaart - Kaart bijgewerkt met methode-aanroep

Opmerking

Wanneer u de kaart bijwerkt, ziet u mogelijk een bericht met de code-index die is gebruikt om uw kaart te maken, is bijgewerkt. Dit betekent dat iemand de code heeft gewijzigd, waardoor de kaart niet overeenkomt met de huidige code. Hierdoor kunt u de kaart niet bijwerken, maar mogelijk moet u de kaart opnieuw maken om te bevestigen dat deze overeenkomt met de code.

Nu bent u klaar met uw onderzoek. U hebt succesvol het probleem gevonden en opgelost door de code in kaart te brengen. U hebt ook een kaart waarmee u door de code kunt navigeren, weet wat u hebt geleerd en de stappen die u hebt ondernomen om het probleem op te lossen.