파이썬 프로그램이 실제로 어떻게 동작하는지 직접 확인하는 방법이 있을까요? 바로 디버거를 사용해서 프로그램의 실행을 분석해볼 수 있습니다.
vscode에선 python extension을 설치해서 실행을 준비합니다. 그럼 python debugger도 함께 설치가 됩니다.

그 다음으로 폴더의 최상위에 .vscode/ 폴더를 만들고 launch.json을 만듭니다. (.vscode/launch.json)
{
"configurations": [
{
"name": "Python 프로그램",
"type": "debugpy",
"request": "launch",
"program": "${workspaceFolder}/main.py",
}
]
}
{workspaceFolder}/ 뒤에 오는 파일명은 main 함수가 들어있는 파일을 지정하면 됩니다.
각 설정의 옵션은 무엇인지 간단히 살펴보겠습니다.
configurations에는 여러 설정을 저장할 수 있기 때문에 name을 통해 어떤 설정인지를 구분해줍니다.
type은 어떤 디버거를 사용할지 지정하는 것이고 저희는 python debugger를 사용하기 때문에 debugpy를 써줍니다.
request는 어떤 형태로 디버깅을 할 것인지 지정하는데 실행과 함께 디버깅을 하기 때문에 launch 로 지정해줍니다.
program은 main이 있는 파일을 지정해줍니다. {workspaceFolder}는 vscode로 연 경로로 최상위 경로를 의미합니다.
다음과 같은 python 프로그램을 main.py에 작성해서 테스트 해보겠습니다.
def main() -> None:
my_str = "Welcome"
print(my_str)
my_str = "Bye"
print(my_str)
if __name__ == "__main__":
main()
그 다음 사진과 같이 코드 왼쪽에 마우스를 올려 breakpoint를 추가해줍니다.

이제 Run - Start Debugging을 누르면 디버깅이 시작됩니다.

다음처럼 노란색으로 표기되면 정상적으로 브레이크 포인트에서 실행이 멈춘 상태가 됩니다.
좌측 패널에 보면 variables, watch, call stack, breakpoints 같은 섹션이 보입니다. 우리가 프로그램을 실행할 때는 어떤 함수가 실행 중인지, 이 함수가 호출되기 까지 어떤 함수를 거쳐서 왔는지를 나타내는 정보는 callstack에서 확인할 수 있습니다. 아직 아무 코드도 실행되지 않은 상태이기 때문에 할당된 변수는 하나도 안 보입니다.

우측 상단에 다음과 같이 아이콘이 보이실텐데요. 순서대로 continue, step over, step into, step out, restart, stop입니다.
- continue는 다음 브레이크 포인트가 나올 때까지 실행
- step over: 다음 라인으로 실행
- step into: 함수가 있다면 해당 함수로 진입. 없다면 다음 라인으로 실행
- step out: 현재 함수를 다 실행하고 리턴
- restart: 디버깅 다시 시작
- stop: 디버깅 종료

step over를 눌러보면 print(my_str)로 이동하고 my_str에 마우스를 올려보면 'Welcome'이 들어가 있는 것을 볼 수 있습니다.

우리가 작성한 파이썬 프로그램도 결국 한 줄씩 실행되고 함수의 호출로 진행되는 것이기 때문에 call stack, variables에 있는 정보로 어떤 상황인지를 파악할 수 있습니다. watch는 내가 원하는 값이 어떻게 평가 되는지 알 수 있습니다. 예를 들어 현재 상태에서 my_str[:3] 이라고 하면 Wel 이 표시가 됩니다.

이상으로 기본적인 파이썬 디버깅 방법을 알아보았습니다.
'개발' 카테고리의 다른 글
| LLDB을 이용한 C++ 디버깅 원리 (1) | 2026.08.30 |
|---|---|
| 부동소수점은 왜 필요할까? (0) | 2026.08.23 |
| 터미널에서 ctrl+c를 눌렀을 때 어떻게 동작할까? (0) | 2026.08.09 |
| docker 컨테이너의 프로세스 구조 간단히 알아보기 (1) | 2026.08.02 |
| python 배열 slicing(item[2:])의 성능은 왜 O(n)일까 (0) | 2026.07.26 |