pdb를 사용해서 대화형 디버깅

매일 공부(ML)·2022년 10월 11일
0

파이썬 코딩의 기술

목록 보기
18/27

대화형 디버거

-- 프로그램의 상태 보기

  • 지역 변수 출력

  • 한 번에 한 문장씩 실행

  • 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 내장 하무를 호출하면 모든 지역 변수 목록 보기

    • Pdb 프롬포트에서 모듈 임포트
    • 새로운 객체 만들기
    • help 내장 함수실행
    • 프로그램 일부 변경

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 )

Summary

• 프로그램에서 관심이 있는 부분에 breakpoi nt 내장 함수 호출을 추가하면 (프로그램을
실행하던 중에) 그 위치에서 파이썬 대화형 디버거를 시작할 수 있다

• 파이썬 디버거 프롬프트는 완전한 파이썬 셸이기 때문에 실행 중인 프로그램의 상태를
원하는 대로 관찰하거나 변 경할 수 있다.

• pdb 셀 영령어를 사용하면 프로그램 실행을 정밀하게 제어할 수 있고, 프로그램의 상태
를 관찰하는 과정과 프로그램을 진행시키는 과정을 번갈아가며 수행할 수 있다

• 독립 실행한 파이썬 프로그램에서 예외가 발생한 겅우. pdb 모듈을 사용(python -m
pdb -c continue 프로그램 경 로)하거나 대화형 파이썬 인터프리터(import pdb;
pdb.pm ( ) )를 사용해 디 버 깅할수 있다

profile
성장을 도울 아카이빙 블로그

0개의 댓글