Poznaj porady i wskazówki dotyczące wydajności debugera w programie Visual Studio

Przeczytaj ten temat, aby poznać kilka wskazówek i wskazówek dotyczących produktywności debugera programu Visual Studio. Aby zapoznać się z podstawowymi funkcjami debugera, zobacz Pierwsze spojrzenie na debuger. W tym temacie omówiono niektóre obszary, które nie są uwzględnione w przewodniku po funkcji.

Skróty klawiaturowe

Aby uzyskać listę najczęściej używanych skrótów klawiaturowych związanych z debugowaniem, zobacz sekcję Debugowanie w skrótach klawiaturowych.

Przypinanie porad dotyczących danych

Jeśli często umieszczasz wskaźnik myszy na wskazówkach dotyczących danych podczas debugowania, możesz przypiąć poradę dotyczącą danych dla zmiennej, aby zapewnić sobie szybki dostęp. Zmienna pozostaje przypięta nawet po ponownym uruchomieniu. Aby przypiąć poradę dotyczącą danych, kliknij ikonę pinezki podczas umieszczania na niej wskaźnika myszy. Można przypiąć wiele zmiennych.

Przypinanie porady o danych

Możesz również dostosować porady dotyczące danych na kilka innych sposobów, takie jak utrzymywanie rozwiniętej porady dotyczącej danych ( lepka porada dotycząca danych) lub przezroczystość porad dotyczących danych. Aby uzyskać więcej informacji, zobacz Wyświetlanie wartości danych w obszarze Dane Wskazówki w edytorze kodu.

Edytuj kod i kontynuuj debugowanie (C#, VB, C++)

W większości języków obsługiwanych przez program Visual Studio możesz edytować kod w trakcie sesji debugowania i kontynuować debugowanie. Aby użyć tej funkcji, kliknij kod z kursorem podczas wstrzymania w debugerze, wprowadź zmiany i naciśnij klawisz F5, F10 lub F11 , aby kontynuować debugowanie.

Edytowanie i kontynuowanie debugowania

Aby uzyskać więcej informacji na temat korzystania z funkcji i ograniczeń funkcji, zobacz Edytowanie i kontynuowanie.

Edytowanie kodu XAML i kontynuowanie debugowania

Aby zmodyfikować kod XAML podczas sesji debugowania, zobacz Pisanie i debugowanie uruchomionego kodu XAML przy użyciu Przeładowywanie na gorąco XAML.

Problemy z debugowaniem, które są trudne do odtworzenia

Jeśli ponowne utworzenie określonego stanu w aplikacji jest trudne lub czasochłonne, rozważ, czy użycie warunkowego punktu przerwania może pomóc. Możesz użyć warunkowych punktów przerwania i filtrować punkty przerwania, aby uniknąć włamania do kodu aplikacji, dopóki aplikacja nie wprowadzi żądanego stanu (na przykład stanu, w którym zmienna przechowuje nieprawidłowe dane). Warunki można ustawić przy użyciu wyrażeń, filtrów, liczby trafień itd.

Aby utworzyć warunkowy punkt przerwania

  1. Kliknij prawym przyciskiem myszy ikonę punktu przerwania (czerwona kula) i wybierz pozycję Warunki.

  2. W oknie punkt przerwania Ustawienia wpisz wyrażenie.

    Warunkowy punkt przerwania

  3. Jeśli interesuje Cię inny typ warunku, wybierz pozycję Filtruj zamiast wyrażenia warunkowego w oknie dialogowym Ustawienia punktu przerwania, a następnie postępuj zgodnie z poradami dotyczącymi filtru.

Konfigurowanie danych do pokazania w debugerze

W przypadku języków C#, Visual Basic i C++ (tylko kod C++/CLI) możesz poinformować debugera, jakie informacje mają być wyświetlane przy użyciu atrybutu DebuggerDisplay . W przypadku kodu C++ można to zrobić przy użyciu wizualizacji Natvis.

Dołączanie do tej samej aplikacji wielokrotnie

Jeśli używasz funkcji dołączania do procesu, możesz szybko ponownie dołączyć do procesu, do którego wcześniej dołączono, wybierając pozycję Debuguj>ponownie dołącz do procesu (Shift+Alt+P). Po wybraniu tego polecenia debuger natychmiast podejmie próbę dołączenia do ostatniego procesu dołączonego przez próbę dopasowania poprzedniego identyfikatora procesu do poprzedniego identyfikatora procesu, a jeśli to się nie powiedzie, pasując do poprzedniej nazwy procesu. Jeśli nie znaleziono dopasowań lub jeśli kilka procesów ma taką samą nazwę, zostanie otwarte okno dialogowe Dołączanie do procesu, aby można było wybrać prawidłowy proces.

Śledzenie obiektu poza zakresem (C#, Visual Basic)

Zmienne można łatwo wyświetlać przy użyciu okien debugera, takich jak okno Watch . Jednak gdy zmienna wykracza poza zakres w oknie Obserwowanie , możesz zauważyć, że jest wyszaryzowana. W niektórych scenariuszach aplikacji wartość zmiennej może ulec zmianie nawet wtedy, gdy zmienna jest poza zakresem, i warto ją uważnie obserwować (na przykład zmienna może zostać odebrana bezużytecznie). Zmienną można śledzić, tworząc dla niej identyfikator obiektu w oknie Obserwowanie .

Aby utworzyć identyfikator obiektu

  1. Ustaw punkt przerwania w pobliżu zmiennej, którą chcesz śledzić.

  2. Uruchom debuger (F5) i zatrzymaj się w punkcie przerwania.

  3. Znajdź zmienną w oknie Ustawienia lokalne (Debuguj > ustawienia lokalne systemu Windows>), kliknij prawym przyciskiem myszy zmienną i wybierz pozycję Ustaw identyfikator obiektu.

    Tworzenie identyfikatora obiektu

  4. W oknie Ustawienia lokalne powinien zostać wyświetlony $ znak plus. Ta zmienna jest identyfikatorem obiektu.

  5. Kliknij prawym przyciskiem myszy zmienną identyfikatora obiektu i wybierz polecenie Dodaj zegarek.

Aby uzyskać więcej informacji, zobacz Tworzenie identyfikatora obiektu.

Wyświetlanie wartości zwracanych dla funkcji

Aby wyświetlić zwracane wartości funkcji, zapoznaj się z funkcjami wyświetlanymi w oknie Autos podczas przechodzenia przez kod. Aby wyświetlić wartość zwracaną dla funkcji, upewnij się, że funkcja, którą cię interesuje, została już wykonana (naciśnij klawisz F10 po zatrzymaniu w wywołaniu funkcji). Jeśli okno zostanie zamknięte, otwórz okno Autos debugowania > systemu Windows>.

Okno autos

Ponadto możesz wprowadzić funkcje w oknie Natychmiastowe , aby wyświetlić wartości zwracane. (Otwórz go przy użyciu Debugowanie > systemu Windows > natychmiast.)

Okno bezpośrednie

Można również użyć pseudovariables w oknie Czujka i Natychmiastowe , takie jak $ReturnValue.

Sprawdzanie ciągów w wizualizatorze

Podczas pracy z ciągami warto wyświetlić cały sformatowany ciąg. Aby wyświetlić zwykły tekst, KOD XML, HTML lub ciąg JSON, kliknij ikonę VisualizerIcon lupy podczas umieszczania kursora na zmiennej zawierającej wartość ciągu.

Otwieranie wizualizatora ciągów

Wizualizator ciągów może pomóc w znalezieniu, czy ciąg jest źle sformułowany, w zależności od typu ciągu. Na przykład puste pole Wartość wskazuje, że ciąg nie jest rozpoznawany przez typ wizualizatora. Aby uzyskać więcej informacji, zobacz Okno dialogowe Wizualizator ciągów.

Wizualizator ciągów JSON

W przypadku kilku innych typów, takich jak DataSet i DataTable, które są wyświetlane w oknach debugera, można również otworzyć wbudowany wizualizator.

Analizowanie użycia pamięci

Migawki sterty można wykonać i porównać, zoptymalizować użycie pamięci i znaleźć przeciek pamięci przy użyciu narzędzi użycia pamięci. Aby uzyskać więcej informacji, zobacz Wybieranie narzędzia do analizy pamięci.

Tworzenie pliku zrzutu

Plik zrzutu to migawka przedstawiająca proces, który był wykonywany i moduły załadowane dla aplikacji w danym momencie. Zrzut z informacjami o stercie zawiera również migawkę pamięci aplikacji w tym momencie. Zrzuty są najczęściej używane do debugowania problemów z maszynami, do których deweloperzy nie mają dostępu.

Jeśli chcesz zapisać plik zrzutu, wybierz pozycję Debuguj > zapisz zrzut jako.

Aby przeanalizować plik zrzutu, wybierz pozycję Plik > Otwórz w programie Visual Studio. Aby rozpocząć debugowanie przy użyciu pliku zrzutu, wybierz pozycję Debuguj tylko za pomocą funkcji Zarządzane, Debuguj tylko z natywnym, Debuguj z użyciem funkcji mieszanej lub Debuguj za pomocą pamięci zarządzanej.

Aby uzyskać więcej informacji, zobacz Dump files (Pliki zrzutu).

Podział na kod dotyczący obsługiwanych wyjątków

Debuger dzieli kod na nieobsługiwane wyjątki. Jednak obsługiwane wyjątki (takie jak wyjątki występujące w try/catch bloku) mogą być również źródłem usterek i warto zbadać, kiedy wystąpią. Debuger można również skonfigurować tak, aby dzielił kod na obsługiwane wyjątki, konfigurując opcje w oknie dialogowym Wyjątki Ustawienia. Otwórz to okno dialogowe, wybierając pozycję Debuguj > wyjątek systemu Windows Ustawienia.>

Okno dialogowe Wyjątki Ustawienia pozwala poinformować debugera o podzieleniu kodu na określone wyjątki. Na poniższej ilustracji debuger dzieli kod za każdym razem, gdy wystąpi.System.NullReferenceException Aby uzyskać więcej informacji, zobacz Zarządzanie wyjątkami.

Okno dialogowe wyjątku Ustawienia

Zmienianie przepływu wykonywania

W przypadku wstrzymania debugera w wierszu kodu użyj myszy, aby chwycić żółty wskaźnik strzałki po lewej stronie. Przenieś żółty wskaźnik strzałki do innego punktu w ścieżce wykonywania kodu. Następnie użyj klawisza F5 lub polecenia kroku, aby kontynuować uruchamianie aplikacji.

Przenoszenie wskaźnika wykonywania

Zmieniając przepływ wykonywania, można wykonywać takie czynności, jak testowanie różnych ścieżek wykonywania kodu lub ponowne uruchamianie kodu bez ponownego uruchamiania debugera. Aby uzyskać więcej informacji, zobacz Przenoszenie wskaźnika wykonywania.

Ostrzeżenie

Często należy zachować ostrożność przy użyciu tej funkcji i zobaczyć ostrzeżenie w etykietce narzędzia. Mogą też zostać wyświetlone inne ostrzeżenia. Przeniesienie wskaźnika nie może przywrócić aplikacji do wcześniejszego stanu aplikacji.

Debugowanie zakleszczeń i warunków wyścigu

Jeśli musisz debugować rodzaje problemów, które są typowe dla aplikacji wielowątkowych, często pomaga wyświetlić lokalizację wątków podczas debugowania. Można to łatwo zrobić za pomocą przycisku Pokaż wątki w źródle .

Aby wyświetlić wątki w kodzie źródłowym:

  1. Podczas debugowania kliknij przyciskPokaż wątki w źródlePokaż wątki w źródle na pasku narzędzi Debugowanie.

  2. Spójrz na rynnę po lewej stronie okna. W tym wierszu zobaczysz ikonę Znacznik wątku znacznika wątku przypominającą dwa wątki tkaniny. Znacznik wątku wskazuje, że w tej lokalizacji zatrzymano wątek.

    Zauważ, że znacznik wątku może być częściowo ukryty przez punkt przerwania.

  3. Umieść wskaźnik na znaczniku wątku. Zostanie wyświetlona etykietka danych. Etykietka danych informuje o nazwie i numerze identyfikatora wątku dla każdego zatrzymanych wątków.

    Możesz również wyświetlić lokalizację wątków w oknie Stosy równoległe.

Dowiedz się więcej na temat dołączania debugera do aplikacji (C#, C++, Visual Basic, F#)

Aby dołączyć do uruchomionej aplikacji, debuger ładuje pliki symboli (.pdb) wygenerowane dla dokładnie tej samej kompilacji aplikacji, którą próbujesz debugować. W niektórych scenariuszach może być przydatna niewielka wiedza na temat plików symboli. Możesz sprawdzić, jak program Visual Studio ładuje pliki symboli przy użyciu okna Moduły .

Otwórz okno Moduły podczas debugowania, wybierając pozycję Debuguj > moduły systemu Windows>. W oknie Moduły można sprawdzić, jakie moduły debuger traktuje jako kod użytkownika lub Mój kod oraz stan ładowania symboli dla modułu. W większości scenariuszy debuger automatycznie wyszukuje pliki symboli dla kodu użytkownika, ale jeśli chcesz przejść do (lub debugować) kod platformy .NET, kod systemowy lub kod biblioteki innej firmy, wymagane są dodatkowe kroki w celu uzyskania poprawnych plików symboli.

Wyświetlanie informacji o symbolach w oknie Moduły

Informacje o symbolach można załadować bezpośrednio z okna Moduły , klikając prawym przyciskiem myszy i wybierając pozycję Załaduj symbole.

Czasami deweloperzy aplikacji wysyłają aplikacje bez pasujących plików symboli (aby zmniejszyć ślad), ale zachowają kopię pasujących plików symboli kompilacji, aby umożliwić im debugowanie wydanej wersji później.

Aby dowiedzieć się, jak debuger klasyfikuje kod jako kod użytkownika, zobacz Just My Code (Tylko mój kod). Aby dowiedzieć się więcej na temat plików symboli, zobacz Określanie symboli (.pdb) i plików źródłowych w debugerze programu Visual Studio.

Dowiedz się więcej

Aby uzyskać dodatkowe porady i wskazówki oraz bardziej szczegółowe informacje, zobacz następujące wpisy w blogu:

Skróty klawiaturowe