Krok 4. Uruchamianie kodu w debugerze

Poprzedni krok: Korzystanie z interakcyjnego okna REPL

Program Visual Studio umożliwia zarządzanie projektami, rozbudowane środowisko edycji, okno Interaktywne i pełne debugowanie kodu w języku Python. W debugerze możesz uruchomić kod krok po kroku, w tym każdą iterację pętli. Można również wstrzymać program, gdy spełnione są pewne warunki. W dowolnym momencie, gdy program jest wstrzymany w debugerze, można sprawdzić cały stan programu i zmienić wartość zmiennych. Takie działania są niezbędne do śledzenia usterek programu, a także zapewniają pomoc w przypadku dokładnego przepływu programu.

  1. Zastąp kod w pliku PythonApplication1.py następującym kodem. Ta odmiana kodu rozszerza make_dot_string się, aby można było zbadać jego dyskretne kroki w debugerze. Umieszcza również pętlę formain w funkcji i uruchamia ją jawnie, wywołując tę funkcję:

    from math import cos, radians
    
    # Create a string with spaces proportional to a cosine of x in degrees
    def make_dot_string(x):
        rad = radians(x)                             # cos works with radians
        numspaces = int(20 * cos(rad) + 20)          # scale to 0-40 spaces
        st = ' ' * numspaces + 'o'                   # place 'o' after the spaces
        return st
    
    def main():
        for i in range(0, 1800, 12):
            s = make_dot_string(i)
            print(s)
    
    main()
    
  2. Sprawdź, czy kod działa prawidłowo, naciskając klawisz F5 lub wybierając polecenie menu Debuguj>rozpocznij debugowanie. To polecenie uruchamia kod w debugerze. Od tej pory nic nie zostało zrobione, aby wstrzymać program podczas jego działania, po prostu wyświetli wzorzec fali dla kilku iteracji. Naciśnij dowolny klawisz, aby zamknąć okno danych wyjściowych.

    Napiwek

    Aby zamknąć okno danych wyjściowych automatycznie po zakończeniu działania programu, wybierz polecenie menu Narzędzia>Opcje, rozwiń węzeł Języka Python, wybierz pozycję Debugowanie, a następnie wyczyść opcję Poczekaj na dane wejściowe, gdy proces zakończy się normalnie:

    Python debugging option to close the output window on normal program exit

    Aby uzyskać więcej informacji na temat debugowania i sposobu ustawiania argumentów skryptu i interpretera, zobacz Debugowanie kodu języka Python.

  3. Ustaw punkt przerwania w for instrukcji, klikając raz na szarym marginesie przez ten wiersz lub umieszczając daszek w tym wierszu i używając polecenia Debuguj>przełącz punkt przerwania (F9). Czerwona kropka pojawia się na szarym marginesie, aby wskazać punkt przerwania (jak zauważyła strzałka poniżej):

    Setting a breakpoint

  4. Uruchom ponownie debuger (F5) i sprawdź, czy uruchamianie kodu zatrzymuje się w wierszu z tym punktem przerwania. W tym miejscu możesz sprawdzić stos wywołań i sprawdzić zmienne. Zmienne, które są w zakresie, są wyświetlane w oknie Automatyczne po zdefiniowaniu. Możesz również przełączyć się do widoku Ustawienia lokalne w dolnej części tego okna, aby wyświetlić wszystkie zmienne znalezione w bieżącym zakresie (w tym funkcje), nawet przed ich zdefiniowaniem:

    Breakpoint UI experience for Python

  5. Obserwuj pasek narzędzi debugowania (pokazany poniżej) u góry okna programu Visual Studio. Ten pasek narzędzi zapewnia szybki dostęp do najczęściej używanych poleceń debugowania (które można również znaleźć w menu Debugowanie ):

    Essential debugging toolbar buttons

    Przyciski od lewej do prawej w następujący sposób:

    Przycisk Polecenie
    Kontynuuj (F5) Uruchamia program do następnego punktu przerwania lub do momentu ukończenia programu.
    Przerwij wszystko (Ctrl+Alt+Break) Wstrzymuje długotrwały program.
    Zatrzymaj debugowanie (Shift+F5) Zatrzymuje program wszędzie tam, gdzie jest, i zamyka debuger.
    Uruchom ponownie (Ctrl+Shift+F5) Zatrzymuje program wszędzie tam, gdzie jest, i uruchamia go ponownie od początku w debugerze.
    Pokaż następną instrukcję (Alt+Num)* Przełącza się do następnego wiersza kodu do uruchomienia. Jest to przydatne w przypadku poruszania się po kodzie podczas sesji debugowania i szybkiego powrotu do punktu wstrzymania debugera.
    Przechodzenie do (F11) Uruchamia następny wiersz kodu, wprowadzając w wywoływane funkcje.
    Krok do kroku (F10) Uruchamia następny wiersz kodu bez wprowadzania w wywoływanych funkcjach.
    Wyjście (Shift+F11) Uruchamia pozostałą część bieżącej funkcji i wstrzymuje kod wywołujący.
  6. Aby przejść do instrukcji, użyj instrukcji for Step Over. Krok oznacza , że debuger uruchamia bieżący wiersz kodu, w tym wszystkie wywołania funkcji, a następnie natychmiast wstrzymuje się ponownie. Zwróć uwagę, że w kodzie zmienna i jest teraz definiowana w oknach Ustawienia lokalne i Automatyczne .

  7. Przejdź do następnego wiersza kodu, który wywołuje make_dot_string i wstrzymuje. Krok w tym miejscu oznacza, że debuger uruchamia cały make_dot_string element i wstrzymuje się po powrocie. Debuger nie zatrzymuje się wewnątrz tej funkcji, chyba że istnieje tam oddzielny punkt przerwania.

  8. Kontynuuj przechodzenie przez kod jeszcze kilka razy i obserwuj zmianę wartości w oknie Ustawienia lokalne lub Automatyczne .

  9. W oknie Ustawienia lokalne lub Automatyczne kliknij dwukrotnie kolumnę Wartość dla i zmiennych lubs, aby edytować wartość. Naciśnij klawisz Enter lub wybierz dowolny obszar poza tę wartość, aby zastosować wszelkie zmiany.

  10. Kontynuuj przechodzenie przez kod przy użyciu instrukcji Krok do. Krok do oznacza, że debuger wprowadza wewnątrz dowolnego wywołania funkcji, dla którego ma informacje debugowania, takie jak make_dot_string. Po przejściu do wewnątrz make_dot_string możesz zbadać jego zmienne lokalne i przejść przez jego kod specjalnie.

  11. Kontynuuj krok krok do kroku i zwróć uwagę, że gdy osiągniesz koniec make_dot_string, następny krok powróci do for pętli z nową wartością zwracaną w zmiennejs. Po ponownym kroku do instrukcji print zwróć uwagę, że funkcja Step Into print nie wchodzi w tę funkcję. Jest to spowodowane tym, że print nie jest napisany w języku Python, ale jest raczej natywnym kodem wewnątrz środowiska uruchomieniowego języka Python.

  12. Kontynuuj korzystanie z kroków do momentu ponownego przejścia do elementu make_dot_string. Następnie użyj polecenia Step Out i zwróć uwagę, że powrócisz do for pętli. W przypadku funkcji Step Out debuger uruchamia pozostałą część funkcji, a następnie automatycznie wstrzymuje kod wywołujący. Jest to przydatne w przypadku przejścia przez część długiej funkcji, którą chcesz debugować. Przejdzie przez resztę i nie ustawi jawnego punktu przerwania w kodzie wywołującym.

  13. Aby kontynuować uruchamianie programu do momentu osiągnięcia następnego punktu przerwania, użyj pozycji Kontynuuj (F5). Ponieważ w for pętli istnieje punkt przerwania, należy przerwać w następnej iteracji.

  14. Przechodzenie przez setki iteracji pętli może być żmudne, więc program Visual Studio umożliwia dodanie warunku do punktu przerwania. Debuger następnie wstrzymuje program w punkcie przerwania tylko wtedy, gdy warunek zostanie spełniony. Można na przykład użyć warunku z punktem przerwania w for instrukcji , aby wstrzymać go tylko wtedy, gdy wartość i przekracza 1600. Aby ustawić warunek, kliknij prawym przyciskiem myszy czerwoną kropkę punktu przerwania i wybierz pozycję Warunki (Alt+F9>C). W wyświetlonym oknie podręcznym Punkt przerwania Ustawienia wprowadź i > 1600 jako wyrażenie i wybierz pozycję Zamknij. Naciśnij klawisz F5 , aby kontynuować i obserwować, że program uruchamia wiele iteracji przed następną przerwą.

    Setting a breakpoint condition

  15. Aby uruchomić program do ukończenia, wyłącz punkt przerwania, klikając prawym przyciskiem myszy kropkę na marginesie i wybierając polecenie Wyłącz punkt przerwania (Ctrl+F9). Następnie wybierz pozycję Kontynuuj (lub naciśnij klawisz F5), aby uruchomić program. Po zakończeniu programu program Visual Studio zatrzymuje sesję debugowania i wraca do trybu edycji. Możesz również usunąć punkt przerwania, wybierając jego kropkę lub klikając prawym przyciskiem myszy kropkę i wybierając pozycję Usuń punkt przerwania. Spowoduje to również usunięcie wszystkich wcześniej ustawionych warunków.

Napiwek

W niektórych sytuacjach, takich jak niepowodzenie uruchomienia interpretera języka Python, okno danych wyjściowych może pojawić się tylko na krótko, a następnie zamknąć automatycznie bez możliwości wyświetlenia komunikatów o błędach. Jeśli tak się stanie, kliknij prawym przyciskiem myszy projekt w Eksplorator rozwiązań, wybierz pozycję Właściwości, wybierz kartę Debugowanie, a następnie dodaj -i do pola Argumenty interpretera. Ten argument powoduje przejście interpretera do trybu interaktywnego po zakończeniu programu, dzięki czemu okno jest otwarte, dopóki nie wprowadzisz klawiszy Ctrl+Z>Enter, aby zakończyć działanie.

Następny krok

Głębiej