Używanie map kodu do debugowania aplikacji

Mapy kodu w programie Visual Studio mogą pomóc uniknąć utraty dużych baz kodu, nieznanego kodu lub starszego kodu. Na przykład podczas debugowania może być konieczne przyjrzenie się kodowi w wielu plikach i projektach. Użyj map kodu, aby poruszać się po fragmentach kodu i zrozumieć relacje między nimi. W ten sposób nie musisz śledzić tego kodu w głowie ani rysować oddzielnego diagramu. Dlatego po przerwaniu pracy mapy kodu pomagają odświeżyć pamięć o kodzie, nad którym pracujesz.

Code map - Map relationships in code

Zielona strzałka pokazuje, gdzie kursor pojawia się w edytorze

Aby uzyskać szczegółowe informacje na temat poleceń i akcji, których można używać podczas pracy z mapami kodu, zobacz Przeglądanie i zmienianie kolejności map kodu.

Dowiedz się więcej o debugowaniu w programie Visual Studio za pomocą narzędzia debugera.

Uwaga

Aby tworzyć i edytować mapy kodu, potrzebujesz wersji Visual Studio Enterprise. W wersjach Visual Studio Community i Professional można otwierać diagramy wygenerowane w wersji Enterprise, ale nie można ich edytować.

Omówienie problemu

Przypuśćmy, że w programie graficznym, nad którym pracujesz, znajduje się błąd. Aby odtworzyć usterkę, otwórz rozwiązanie w programie Visual Studio i naciśnij klawisz F5 , aby rozpocząć debugowanie.

Gdy narysujesz linię i wybierzesz pozycję Cofnij mój ostatni pociągnięcie, nic się nie dzieje, dopóki nie narysujesz następnego wiersza.

Code map - Repro bug

Dlatego zacznij badać, wyszukując metodę Undo . Znajdziesz go w PaintCanvas klasie .

Code map - Find code

Uruchamianie mapowania kodu

Teraz rozpocznij mapowanie undo metody i jej relacji. W edytorze kodu należy dodać metodę undo i pola, do których odwołuje się do nowej mapy kodu. Podczas tworzenia nowej mapy może trochę czasu może zająć indeksowanie kodu. Dzięki temu następne operacje działają szybciej.

Code map - Show method and related fields

Napiwek

Zielone podświetlenie pokazuje ostatnie elementy dodane do mapy. Zielona strzałka pokazuje położenie kursora w kodzie. Strzałki między elementami reprezentują różne relacje. Więcej informacji o elementach na mapie można uzyskać, przenosząc mysz nad nimi i sprawdzając etykietki narzędzi.

Code map - Show tooltips

Aby wyświetlić definicję kodu dla każdego pola, kliknij dwukrotnie pole na mapie lub wybierz pole i naciśnij klawisz F12. Zielona strzałka przesuwa się między elementami na mapie. Kursor w edytorze kodu również przesuwa się automatycznie.

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.

Napiwek

Zieloną strzałkę na mapie możesz również przesunąć, przesuwając kursor w edytorze kodu.

Omówienie relacji między fragmentami kodu

Teraz chcesz wiedzieć, który inny kod wchodzi w interakcję z polami history i paintObjects . Możesz dodać do mapy wszystkie metody odwołujące się do tych pól. Możesz to zrobić na mapie lub w edytorze kodu.

Code map - Find all references

Open a code map from the code editor

Uwaga

Jeśli dodasz elementy z projektu udostępnionego w wielu aplikacjach, takich jak Windows Telefon lub Windows Store, te elementy są zawsze wyświetlane z aktualnie aktywnym projektem aplikacji na mapie. Jeśli więc zmienisz kontekst na inny projekt aplikacji, kontekst na mapie również zmieni się dla wszystkich nowo dodanych elementów z udostępnionego projektu. Operacje wykonywane za pomocą elementu na mapie dotyczą tylko tych elementów, które współużytkują ten sam kontekst.

Zmień układ, aby przeorganizować przepływ relacji i poprawić czytelność mapy. Elementy na mapie możesz również przesuwać, przeciągając je.

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

Napiwek

Domyślnie układ przyrostowy jest włączony. Dzięki temu mapa jest reorganizowana w możliwie najmniejszym stopniu przy dodawaniu nowych elementów. Aby zmienić kolejność całej mapy za każdym razem, gdy dodasz nowe elementy, wyłącz opcję Układ przyrostowy.

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

Zbadajmy te metody. Na mapie kliknij dwukrotnie metodę PaintCanvas lub wybierz tę metodę i naciśnij klawisz F12. Dowiesz się, że ta metoda tworzy history i paintObjects jako puste listy.

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

Teraz powtórz te same kroki, aby zbadać definicję clear metody. Dowiesz się, że clear wykonuje kilka zadań za pomocą poleceń paintObjects i history. Następnie wywołuje metodę Repaint .

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

Teraz sprawdź definicję addPaintObject metody. Wykonuje również niektóre zadania za pomocą poleceń history i paintObjects. Wywołuje również metodę Repaint.

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

Znajdowanie problemu poprzez analizowanie mapy

Wygląda na to, że wszystkie metody modyfikujące history i paintObjects wywołujące metodę Repaint. undo Jednak metoda nie wywołuje Repaintmetody , mimo że undo modyfikuje te same pola. Dlatego uważasz, że możesz rozwiązać ten problem, wywołując polecenie z witryny Repaintundo.

Code map - Find missing method call

Nie mając mapy, z której wynika, że brak tego wywołania, znalezienie problemu mogłoby być trudniejszy, zwłaszcza przy bardziej skomplikowanym kodzie.

Przekazanie ustaleń innym osobom i następne kroki

Zanim Ty lub ktokolwiek inny rozwiąże ten problem, można robić na mapie notatki dotyczące problemu i sposobach jego rozwiązania.

Code map - Comment and flag items for followup

Na przykład możesz dodać komentarze do mapy i flagować elementy przy użyciu kolorów.

Code map - Commented and flagged items

Jeśli masz zainstalowany program Microsoft Outlook, możesz wysłać mapę do innych osób pocztą e-mail. Mapę możesz również wyeksportować jako obraz lub w innym formacie.

Code map - Share, export, mail

Rozwiązanie problemu i pokazanie innym, co zostało zrobione

Aby naprawić tę usterkę, należy dodać wywołanie polecenia do Repaintundoelementu .

Code map - Add missing method call

Aby potwierdzić rozwiązanie problemu, ponownie uruchom sesję debugowania i spróbuj odtworzyć błąd. Teraz wybranie opcji Cofnij ostatnie pociągnięcie działa zgodnie z oczekiwaniami i potwierdza poprawną poprawkę.

Code map - Confirm code fix

Możesz zaktualizować mapę, aby pokazać wprowadzoną poprawkę.

Code map - Update map with missing method call

Mapa pokazuje teraz link między cofnij i przemaluj.

Code map - Updated map with method call

Uwaga

Po zaktualizowaniu mapy, może pojawić się komunikat o zaktualizowaniu indeksu kodu użytego do utworzenia mapy. Oznacza to, że ktoś zmienił kod, co powoduje, że mapa nie pasuje do bieżącego kodu. Nie zatrzymuje to aktualizowania mapy, ale może być konieczne ponowne utworzenie mapy w celu potwierdzenia, że pasuje do kodu.

Teraz skończysz z badaniem. Problem został znaleziony i rozwiązany pomyślnie dzięki mapowaniu kodu. Istnieje również mapa pomagająca w nawigowaniu po kodzie, zapamiętaniu nowych informacji, a także pokazująca kroki, które zostały podjęte w celu rozwiązania problemu.