4단계: 디버거에서 코드 실행

이전 단계: 대화형 REPL 창 사용

Visual Studio에서는 프로젝트, 풍부한 편집 환경, 대화형 창 및 Python 코드에 대한 완전한 기능의 디버깅을 관리하는 기능을 제공합니다. 디버거에서는 루프의 모든 반복을 비롯하여 코드를 단계별로 실행할 수 있습니다. 또한 특정 조건이 true일 때마다 프로그램을 일시 중지할 수 있습니다. 프로그램을 디버거에서 일시 중지하는 경우 언제든지 전체 프로그램 상태를 검사하고 변수 값을 변경할 수 있습니다. 그러한 작업은 프로그램 버그를 추적하는 데 필수적이며, 정확한 프로그램 흐름을 신중하게 따르는 데 도움이 되는 보조 지원을 제공합니다.

  1. PythonApplication1.py 파일의 코드를 다음 코드로 바꿉니다. 이 코드 변형은 make_dot_string을 확장하므로, 디버거에서 해당 개별 단계를 검사할 수 있습니다. 또한 for 루프를 main 함수에 배치하고 해당 함수를 호출하여 명시적으로 실행합니다.

    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. F5 키를 누르거나 디버그>디버깅 시작 메뉴 명령을 선택하여 코드가 제대로 작동하는지 확인합니다. 이 명령은 디버거에서 코드를 실행합니다. 현재까지는 실행 중인 프로그램을 일시 중지하기 위한 작업이 수행되지 않았으며, 몇 번 반복할 수 있도록 웨이브 패턴을 인쇄하기만 합니다. 출력 창을 닫으려면 아무 키나 누릅니다.

    프로그램 완료 시 자동으로 출력 창을 닫으려면 도구>옵션 메뉴 명령을 선택하고 Python 노드를 확장하고 디버깅을 선택한 다음, 프로세스가 정상적으로 종료되면 입력 대기 옵션을 취소합니다.

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

    디버깅과 스크립트 및 인터프리터 인수를 설정하는 방법에 대한 자세한 내용은 Python 코드 디버그를 참조하세요.

  3. 해당 줄 옆에 있는 회색 여백을 한 번 클릭하거나 해당 줄에 캐럿을 추가하고 디버그>중단점 설정/해제 명령(F9)을 사용하여 for 문에 중단점을 설정합니다. 회색 여백에 중단점을 나타내는 빨간색 점이 표시됩니다(아래에 화살표로 표시).

    Setting a breakpoint

  4. 디버거를 다시 시작하고(F5) 해당 중단점이 있는 줄에서 코드 실행이 중지되는 것을 확인합니다. 여기서 호출 스택을 보고 변수를 검사할 수 있습니다. 범위 내에 있는 변수가 정의되는 경우 자동 창에 표시됩니다. 창 아래쪽에 있는 지역 보기로 전환하면 정의되기 전이라도 현재 범위에서 Visual Studio가 찾은 모든 변수를 표시할 수 있습니다(함수 포함).

    Breakpoint UI experience for Python

  5. Visual Studio 창의 맨 위에 있는 디버깅 도구 모음(아래 표시됨)을 확인합니다. 이 도구 모음을 사용하면 가장 일반적인 디버깅 명령(디버그 메뉴에서도 찾을 수 있음)에 빠르게 액세스할 수 있습니다.

    Essential debugging toolbar buttons

    단추는 왼쪽부터 오른쪽 방향으로 다음과 같습니다.

    단추 명령
    계속(F5) 다음 중단점까지 또는 프로그램이 완료될 때까지 프로그램을 실행합니다.
    모두 중단(Ctrl+Alt+Break) 장기 실행 프로그램을 일시 중지합니다.
    디버깅 중지(Shift+F5) 어디서든 프로그램을 중지하고 디버거를 종료합니다.
    다시 시작(Ctrl+Shift+F5) 어디서든 프로그램을 중지하고 디버거의 처음부터 다시 시작합니다.
    다음 문 표시(Alt+Num*) 실행할 코드의 다음 줄로 전환합니다. 디버깅 세션 중 코드 내에서 탐색하고 디버거가 일시 중지된 지점으로 신속하게 돌아가려는 경우에 유용합니다.
    한 단계씩 코드 실행(F11) 호출된 함수를 시작하면서 다음 코드 줄을 실행합니다.
    프로시저 단위 실행(F10) 호출된 함수를 시작하지 않고 다음 코드 줄을 실행합니다.
    프로시저 나가기(Shift+F11) 현재 함수의 나머지를 실행하고 호출 코드에서 일시 중지합니다.
  6. 프로시저 단위 실행을 사용하여 for 문을 실행합니다. 단계별 실행이란 디버거가 모든 함수 호출을 포함하는 현재 코드 줄을 실행한 다음 즉시 다시 일시 중지하는 것을 의미합니다. 이제 코드에서 변수 i지역자동 창에서 어떻게 정의되는지 확인하세요.

  7. make_dot_string을 호출하고 일시 중지하는 다음 코드 줄을 프로시저 단위 실행합니다. 여기서 프로시저 단위 실행이란 특별히 디버거가 전체 make_dot_string을 실행하고 돌아갈 때 일시 중지함을 의미합니다. 디버거는 개별 중단점이 존재하지 않으면 해당 함수 내에서 중지되지 않습니다.

  8. 몇 번 더 코드를 프로시저 단위 실행하고, 지역 또는 자동 창의 값이 어떻게 변하는지 확인합니다.

  9. 지역 또는 자동 창에서 i 또는 s 변수에 대한 열을 두 번 클릭하여 값을 편집합니다. Enter 키를 누르거나 해당 값 바깥쪽의 아무 곳을 선택하여 변경 내용을 적용합니다.

  10. 한 단계씩 코드 실행을 사용하여 코드의 단계별 실행을 계속합니다. 한 단계씩 코드 실행이란 디버거가 make_dot_string과 같이 디버깅 정보가 있는 모든 함수 호출 내부로 들어간다는 것을 의미합니다. make_dot_string 내부에 들어가면 해당 지역 변수를 검토하고 특히 해당 코드를 단계별로 실행할 수 있습니다.

  11. 한 단계씩 코드 실행을 통해 단계별로 실행하고, make_dot_string의 끝에 도달할 때 다음 단계가 s 변수에 새로운 반환 값이 있는 for 루프로 돌아가는 것을 확인합니다. 다시 print 문을 실행할 때, print한 단계씩 코드 실행은 해당 함수를 시작할 수 없습니다. print가 Python에서 작성되지는 않았으나 Python 런타임 내부에 있는 네이티브 코드이기 때문입니다.

  12. make_dot_string으로 들어갈 때까지 한 단계씩 코드 실행을 사용하여 계속합니다. 그런 다음 프로시저 나가기를 사용하고 for 루프로 돌아가는 것을 확인합니다. 프로시저 나가기를 사용하면 디버거가 함수의 나머지 부분을 실행한 다음, 자동으로 호출 코드에서 일시 중지합니다. 이 기능은 디버그할 긴 함수의 일부분을 한 단계씩 실행할 때 유용합니다. 나머지 단계를 한 단계씩 실행하며, 호출 코드에서 명시적 중단점을 설정하지는 않습니다.

  13. 다음 중단점에 도달할 때까지 프로그램 실행을 계속하려면 계속(F5)을 사용합니다. for 루프에 중단점이 있기 때문에 다음 반복에서 중단됩니다.

  14. 수백 개의 루프 반복을 단계별로 실행하면 지루할 수 있으므로, Visual Studio에서는 사용자가 중단점에 대한 조건을 추가할 수 있습니다. 디버거는 조건을 충족하는 경우에만 중단점에서 프로그램을 일시 중지합니다. 예를 들어 i 값이 1600을 초과하는 경우에만 일시 중지하도록 for 문에서 중단점이 설정된 조건을 사용할 수 있습니다. 조건을 설정하려면 빨간색 중단점을 마우스 오른쪽 단추로 클릭하고 조건(Alt+F9>C)을 선택합니다. 표시되는 중단점 설정 창에서 i > 1600을 식으로 입력하고 닫기를 선택합니다. F5 키를 눌러 계속하고 프로그램이 다음 중단 전에 여러 반복을 실행함을 관찰합니다.

    Setting a breakpoint condition

  15. 완료될 때까지 프로그램을 실행하려면 여백의 점을 마우스 오른쪽 단추로 클릭하고 중단점 해제(Ctrl+F9)를 선택하여 중단점을 해제합니다. 그런 다음, 계속을 선택하여(또는 F5 키 누르기) 프로그램을 실행합니다. 프로그램이 종료되면 Visual Studio는 디버깅 세션을 중지하고 해당 편집 모드로 돌아갑니다. 점을 선택하거나 점을 마우스 오른쪽 단추로 클릭하고 중단점 삭제를 선택해서 중단점을 삭제할 수도 있습니다. 이전에 설정한 조건도 모두 삭제합니다.

Python 인터프리터를 시작하지 못할 때와 같이 일부 상황에서는 어떠한 오류 메시지도 확인하지 못할 정도로 출력 창이 아주 잠시 동안만 표시되었다가 자동으로 닫힙니다. 이러한 경우 솔루션 탐색기에서 프로젝트를 마우스 오른쪽 단추로 클릭하고 속성을 선택한 다음, 디버그 탭을 선택하고 인터프리터 인수 필드에 -i를 추가합니다. 이 인수를 사용하면 프로그램이 완료된 후 인터프리터가 대화형 모드로 전환되어 창이 열린 상태로 유지되며 Ctrl+Z>Enter 키를 누르면 종료됩니다.

다음 단계

자세히 알아보기