Verwenden von Code Maps zum Debuggen von Anwendungen

Code Maps in Visual Studio helfen Ihnen, die Übersicht in umfangreichen Codebasen, nicht vertrautem Code oder Legacycode zu behalten. Wenn Sie beispielsweise debuggen, müssen Sie sich möglicherweise Code in vielen Dateien und Projekten ansehen. Mithilfe von Code Maps können Sie in Codeabschnitten navigieren und Beziehungen zwischen ihnen verstehen. Auf diese Weise müssen Sie die den Code nicht gedanklich nachvollziehen oder ein separates Diagramm zeichnen. Wenn Sie die Arbeit unterbrechen müssen, können Code Maps Ihnen helfen, sich den Code wieder ins Gedächtnis zu rufen, an dem Sie arbeiten.

Code map - Map relationships in code

Ein grüner Pfeils zeigt die Position des Cursors im Editor an.

Nähere Informationen zu den Befehlen und Aktionen, die Sie bei der Arbeit mit Code Maps verwenden können, finden Sie unter Durchsuchen und Neuanordnen von Code Maps.

Lesen Sie den Artikel zum Debuggen in Visual Studio mit dem Debuggertool.

Hinweis

Zum Erstellen und Bearbeiten von Code Maps benötigen Sie Visual Studio Enterprise. In Visual Studio Community und Visual Studio Professional können Sie Diagramme öffnen, die in der Enterprise-Edition generiert wurden, aber Sie können sie nicht bearbeiten.

Das Problem verstehen

Nehmen Sie an, in einem Zeichenprogramm, an dem Sie arbeiten, liegt ein Fehler vor. Öffnen Sie die Projektmappe in Visual Studio, und drücken Sie F5, um das Debuggen zu starten und den Fehler zu reproduzieren.

Wenn Sie eine Linie zeichnen und Letzten Strich rückgängig machen auswählen, geschieht nichts, bis Sie die nächste Linie zeichnen.

Code map - Repro bug

Daher beginnen Sie mit der Untersuchung, indem Sie nach der Undo-Methode suchen. Sie finden diese in der PaintCanvas-Klasse.

Code map - Find code

Die Codezuordnung starten

Nun beginnen Sie mit dem Mapping der undo-Methode und ihrer Beziehungen. Fügen Sie im Code-Editor die undo-Methode und die Felder, auf die sie verweist, zu einer neuen Code Map hinzu. Wenn Sie eine neue Zuordnung erstellen, kann es einige Zeit dauern, den Code zu indizieren. Aufgrund der Indizierung können spätere Vorgänge schneller ausgeführt werden.

Code map - Show method and related fields

Tipp

Die letzten zur Zuordnung hinzugefügten Elemente werden grün hervorgehoben. Anhand eines grünen Pfeils wird die Position des Cursors im Code angezeigt. Pfeile zwischen Elementen stellen verschiedene Beziehungen dar. Weitere Informationen zu Elementen in der Map enthalten die entsprechenden QuickInfos. Fahren Sie zur Anzeige einfach mit dem Mauszeiger über das Element.

Code map - Show tooltips

Doppelklicken Sie auf ein Feld in der Map, oder wählen Sie ein Feld aus, und drücken Sie F12, um die Codedefinition für einzelne Felder anzuzeigen. Der grüne Pfeil wird zwischen den Elementen in der Zuordnung verschoben. Der Cursor im Code-Editor wird automatisch ebenfalls bewegt.

Screenshot of a code map window with the history field selected and a code editor window where all instances of history are highlighted.

Screenshot of a code map window with the paintObjects field selected and a code editor window where all instances of paintObjects are highlighted.

Tipp

Sie können den grünen Pfeil in der Zuordnung auch verschieben, indem Sie den Cursor im Code-Editor bewegen.

Beziehungen zwischen Teilen des Codes verstehen

Nun möchten Sie wissen, in welchem anderen Code die Felder history und paintObjects verwendet werden. Sie können der Zuordnung alle Methoden hinzufügen, die auf diese Felder verweisen. Dies kann von der Map oder vom Code-Editor aus erfolgen.

Code map - Find all references

Open a code map from the code editor

Hinweis

Wenn Sie Elemente aus einem Projekt hinzufügen, das von mehreren Apps wie Windows Phone oder Windows Store gemeinsam genutzt wird, werden diese Elemente immer mit dem derzeit aktiven App-Projekt in der Map angezeigt. Wenn Sie also den Kontext auf ein anderes App-Projekt ändern, ändert sich auch der Kontext auf der Map für alle neu hinzugefügte Elemente aus dem freigegebenen Projekt. Vorgänge, die Sie mit einem Element in der Zuordnung ausführen, gelten nur für solche Elemente, die denselben Kontext gemeinsam verwenden.

Ändern Sie das Layout, um den Ablauf der Beziehungen neu anzuordnen und die Zuordnung besser lesbar zu machen. Sie können Elemente in der Zuordnung auch verschieben, indem Sie sie an andere Positionen ziehen.

Screenshot of a code map window with the Layout menu open and the Left to Rgiht command selected.

Tipp

Standardmäßig ist die Einstellung Inkrementelles Layout aktiviert. Dadurch wird die Zuordnung so wenig wie möglich neu angeordnet, wenn Sie neue Elemente hinzufügen. Deaktivieren Sie die Einstellung Inkrementelles Layout, um die gesamte Map jedes Mal neu anzuordnen, wenn Sie neue Elemente hinzufügen.

Screenshot of a code map window with the relationshiop arrows between the fields pointing from left to right.

Überprüfen Sie diese Methoden. Doppelklicken Sie in der Map auf die PaintCanvas-Methode, oder wählen Sie diese Methode aus, und drücken Sie F12. Sie erfahren, dass history und paintObjects von dieser Methode als leere Listen erstellt werden.

Screenshot of a code map window with the PaintCanvas method selected and a code snippet image showing the PainCanvas method name highlighted.

Wiederholen Sie nun die gleichen Schritte, um die Definition der clear-Methode zu überprüfen. Sie erfahren, dass in clear einige Aufgaben mit paintObjects und history ausgeführt werden. Anschließend wird die Repaint-Methode aufgerufen.

Screenshot of a code map window with the Clear method selected and a code snippet image showing the code for the Clear method.

Überprüfen Sie nun die Definition der addPaintObject-Methode. Darin werden ebenfalls einige Aufgaben mit history und paintObjects ausgeführt. Auch darin wird Repaint aufgerufen.

Screenshot of a code map window with the addPaintObject method selected and a code snippet image showing the code for the addPaintObject method.

Das Problem durch Prüfen der Zuordnung suchen

Anscheinend wird von allen Methoden, die history und paintObjects ändern, Repaint aufgerufen. Von der undo-Methode wird Repaint jedoch nicht aufgerufen, obwohl von undo die gleichen Felder geändert werden. Daher denken Sie, dass Sie dieses Problem beheben können, indem Sie Repaint von undo aus aufrufen.

Code map - Find missing method call

Wenn Sie keine Zuordnung zur Verfügung gehabt hätten, in der dieser fehlende Aufruf angezeigt wird, wäre es möglicherweise schwieriger gewesen, dieses Problem zu finden, insbesondere bei komplexerem Code.

Ergebnisse freigeben und nächste Schritte

Bevor Sie oder jemand anderes diesen Fehler behebt, können Sie in der Zuordnung Notizen zu dem Problem und dessen Behebung erstellen.

Code map - Comment and flag items for followup

Sie können der Zuordnung beispielsweise Kommentare hinzufügen und Elemente mit Farben kennzeichnen.

Code map - Commented and flagged items

Wenn Microsoft Outlook installiert ist, können Sie die Zuordnung per E-Mail an andere senden. Sie können die Zuordnung auch als Bild oder in einem anderen Format exportieren.

Code map - Share, export, mail

Das Problem beheben und zeigen, was Sie getan haben

Fügen Sie den Aufruf von Repaint zu undo hinzu, um diesen Fehler zu beheben.

Code map - Add missing method call

Starten Sie die Debugsitzung neu, und versuchen Sie, den Fehler zu reproduzieren, um sicherzustellen, dass der Fehler behoben ist. Wenn Sie nun Letzten Strich rückgängig machen auswählen, wird diese Funktion wie erwartet ausgeführt und damit bestätigt, dass Sie die richtige Korrektur vorgenommen haben.

Code map - Confirm code fix

Sie können die Zuordnung aktualisieren, damit die Ihre Korrektur angezeigt wird.

Code map - Update map with missing method call

In der Map wird nun ein Link zwischen undo und Repaint angezeigt.

Code map - Updated map with method call

Hinweis

Wenn Sie die Zuordnung aktualisieren, wird möglicherweise eine Meldung angezeigt, die besagt, dass der zum Erstellen der Zuordnung verwendete Codeindex aktualisiert wurde. Dies bedeutet, dass jemand den Code geändert hat, was dazu führt, dass die Zuordnung nicht mit dem aktuellen Code übereinstimmt. Das hindert Sie nicht daran, die Zuordnung zu aktualisieren. Sie müssen jedoch möglicherweise die Zuordnung neu erstellen, um sicherzustellen, dass sie dem Code entspricht.

Die Überprüfung ist nun abgeschlossen. Sie haben das Problem gefunden und erfolgreich korrigiert, indem Sie den Code zugeordnet haben. Außerdem verfügen Sie über eine Zuordnung, anhand der Sie im Code navigieren, sich an das Gelernte erinnern und die Schritte zur Behebung des Problems anzeigen können.