-- 프로그램의 상태 보기
지역 변수 출력
한 번에 한 문장씩 실행
BREAKPOINT 내장 함수를 호출
- pdb내장 모듈 임포트 후 set_trae 함수 실행
import math
def compute_rmse (observed , ideal ) :
total_err _2 = 0
count = 0
for got, wanted in zip (observed, ideal ) :
err_2 = (got - wanted ) ** 2
breakpoint ( ) # 여 가 서 디 버 거를 시 작함
total _err _2 += err _2
count += 1
mean_err = total_err _2 / count
rmse = math. sqrt (mean_err)
return rmse
result = compute_rmse (
(1 .8, 1.7, 3 .2, 6],
(2, 1.5, 3, 5])
print(result)
Pdb 프롬포트
p<이름>으로 지역 변수 이름 입력
- 변수에 저장된 값 출력
locals 내장 하무를 호출하면 모든 지역 변수 목록 보기
where: 현재 실행 중인 프로그램의 호출 스택을 출력하는 것으로 사용 시 실행 중인 프로그램의 현재 위치 알 수 있고, breakpoint 트리거가 어떻게 발동되었는지 볼 수 있다.
up: 실행 호출 스택에서 현재 관찰 중인 함수를 호출한 쪽(위)으로 호출 스택 영역을 한 단계 이동해서 해당 함수의 지역 변수를 관찰할 수 있게 한다.
down: 실행 호출 스택에서 한 수준 아래로 호출 스택 영역을 이동한다. Down대신 d만 써도 된다.
step: 프로그램을 다음 줄까지 실행한 다음 제어를 디 버 거로 돌려서 디 버 거
프롬프트를 표시한다. 소스 코드 디움- 줄에 함수를 호출하는 부분이 있다면
해당함수의 첫 줄에서 디버거로 제어가 돌아온다.
next: 프로그램을 다음 줄까지 실행한 다음 제어를 디버 거로 돌려서 디버거
프롬프트를 표시한다. 소스 코드의 다음 줄에 함수를 호출하는 부분이 있다
면 해당 함수에서 반환된 다음에 제어가 디버거로 돌아온댜
return : 현재 함수에서 반환될 때 까지 프로그램을 실행한 후 제어가 디버거
로돌아온다.
continue: 다음 중단점에 도달할 때까지 프로그램을 계속 실행한다(프로그
램 소스 코드에 있는 breakpoint 호출이나 디버거에서 설정한 중단점 에서
제어가 디버거에게 돌아온다). 실행하는중에 중단점을 만나지 못하면 프로
그램 실행 이 끝날 때까지 프로그램을 계속 실행한다.
quit: 디버거에서 나가면서 프로그램도 중단시킨다. 문제의 원인을 찾았거
나. 프로그램을 너무 많이 실행했거 나. 프로그램을 수정한 후 다시 시도해
봐야 할 때 이 명 령을 사용한댜
#데이터 지점의 오류 제곱이 1보다 클 때만 디버거
def compute_rmse(observed, ideal):
...
for got, wanted in zip(observed, ideal):
err_2 = (got-wanted) ** 2
if err_2 >-1 : #True인 경우에만 디버거 실행
breakpoint()
total_err_2 += err_2
count +=1
...
result = compute_rmse(
[1.8,1.7,3.2,7],
[2,1.5,3,5])
print(result)
사후 디버깅
예외가 발생하거나 프로그램에 문제가 생겨 중단된 뒤에 프로그램을 디버깅
breakpoint함수 호출을 어디에 추가할지 모를 대 도움
import math
# 평균 제곱근 오차 (root mean square error) 를 구함
def compute_rmse (observed , ideal ) :
...
result = compute_rmse(
[ 1 8 , 1 . 7 , 3 2 , 7j ], # 잘못된 입 력
[2, 1. 5, 3, 5] )
print(result )
• 프로그램에서 관심이 있는 부분에 breakpoi nt 내장 함수 호출을 추가하면 (프로그램을
실행하던 중에) 그 위치에서 파이썬 대화형 디버거를 시작할 수 있다
• 파이썬 디버거 프롬프트는 완전한 파이썬 셸이기 때문에 실행 중인 프로그램의 상태를
원하는 대로 관찰하거나 변 경할 수 있다.
• pdb 셀 영령어를 사용하면 프로그램 실행을 정밀하게 제어할 수 있고, 프로그램의 상태
를 관찰하는 과정과 프로그램을 진행시키는 과정을 번갈아가며 수행할 수 있다
• 독립 실행한 파이썬 프로그램에서 예외가 발생한 겅우. pdb 모듈을 사용(python -m
pdb -c continue 프로그램 경 로)하거나 대화형 파이썬 인터프리터(import pdb;
pdb.pm ( ) )를 사용해 디 버 깅할수 있다