Computer >> 컴퓨터 >  >> 프로그램 작성 >> Python

파이썬 디버거(pdb)

<시간/>

소프트웨어 개발 용어에서 '디버깅'이라는 용어는 프로그램에서 오류를 찾아 수정하는 프로세스에 널리 사용됩니다. Python의 표준 라이브러리에는 Python 프로그램 디버깅을 위한 유틸리티 세트인 pdb 모듈이 포함되어 있습니다.

디버깅 기능은 Pdb 클래스에 정의되어 있습니다. 모듈은 내부적으로 bdb 및 cmd 모듈을 사용합니다.

pdb 모듈에는 매우 편리한 명령줄 인터페이스가 있습니다. –m 스위치를 사용하여 Python 스크립트 실행 시 가져옵니다.

파이썬 –m pdb 스크립트.py

디버거가 어떻게 작동하는지 자세히 알아보기 위해 먼저 Python 모듈(fact.py)을 다음과 같이 작성해 보겠습니다. -

def fact(x):f =1 for i in range(1,x+1):print (i) f =f * i return fif __name__=="__main__":print("factorial of 3=" ,사실(3))

명령줄에서 이 모듈 디버깅을 시작합니다. 이 경우 왼쪽에 화살표(->)를 표시하고 디버거 프롬프트(Pdb)를 생성하여 코드의 첫 번째 줄에서 실행이 중지됩니다.

C:\python36>python -m pdb 사실.py> c:\python36\fact.py(1)()-> 사실(x):(Pdb)

모든 디버거 명령 목록을 보려면 디버거 프롬프트 앞에 'help'를 입력하십시오. 명령에 대해 자세히 알아보려면 'help ' 구문을 사용하십시오.

파이썬 디버거(pdb)

list 명령은 프로그램이 중단된 줄 왼쪽에 -> 기호를 사용하여 전체 코드를 나열합니다.

(Pdb) list1 -> def fact(x):2 f =13 for i in range(1,x+1):4 print (i)5 f =f * i6 return f7 if __name__=="__main__ ":8 print("3의 계승 =", 사실(3))

프로그램을 한 줄씩 이동하려면 단계 또는 다음 명령을 사용하십시오.

(Pdb) 단계> c:\python36\fact.py(7)()-> if __name__=="__main__":(Pdb) next> c:\python36\fact.py(8) ()-> print("factorial of 3 =", fact(3))(Pdb) next123factorial of 3=6--Return--> c:\python36\fact.py(8)( )->없음-> 인쇄("3의 계승 =", 팩트(3))

단계 명령과 다음 명령의 주요 차이점은 단계 명령은 프로그램이 함수 내에서 중지되도록 하는 반면 다음 명령은 호출된 함수를 실행하고 그 다음에 중지한다는 것입니다.

C:\python36>python -m pdb 사실.py> c:\python36\fact.py(1)<모듈>()-> def fact(x):(Pdb) s> c:\python36\ fact.py(7)()-> if __name__=="__main__":(Pdb) n> c:\python36\fact.py(8)()-> print("3의 계승 =",fact(3))(Pdb) s--Call--> c:\python36\fact.py(1)fact()-> def fact(x):(Pdb) n> c:\python36\ fact.py(2)fact()-> f =1(Pdb) n> c:\python36\fact.py(3)fact()-> for i in range(1,x+1):(Pdb) n> c:\python36\fact.py(4)fact()-> print (i)(Pdb) n1> c:\python36\fact.py(5)fact()-> f =f * i(Pdb ) n> c:\python36\fact.py(3)fact()-> for i in range(1, x + 1):(Pdb) n> c:\python36\fact.py(4)fact() -> 인쇄 (i)(Pdb) f,i(1, 2)(Pdb)

또한 step 명령은 --call—프로그램이 함수 호출을 만났을 때 표시하고 --return--- 함수가 끝났을 때 표시합니다. 특정 변수의 이름만 입력하면 언제든지 특정 변수의 값을 확인할 수 있습니다.

break 명령으로 프로그램 내에서 중단점을 설정할 수 있습니다. 줄 번호(중단점이 설정되어야 함)를 지정해야 합니다. 예를 들어 'break 5'는 현재 프로그램의 5행에 중단점을 설정합니다.

(Pdb) list2 f =13 for i in range(1, x + 1):4 print (i)5 f =f * i6 return f7 -> if __name__=="__main__":8 print("factorial of 3=",fact(3))[EOF](Pdb) break 5중단점 1 at c:\python36\fact.py:5(Pdb) 계속1> c:\python36\fact.py(5)fact()-> f =f * i(Pdb) breakNum 유형 Disp Enb Where1 중단점은 c:\python36\fact.py:5중단점에 이미 1번 적중했습니다(Pdb) 계속2> c:\python36\fact.py(5)fact( )-> f =f * i(Pdb) bNum Type Disp Enb Where1 중단점은 c:\python36\fact.py:5중단점이 이미 2번 적중된 예를 유지합니다.

'continue' 명령이 실행되면 프로그램 실행은 중단점을 만날 때까지 계속됩니다. 모든 중단점을 표시하려면 줄 번호 없이 중단 명령을 실행하면 됩니다.

모든 중단점은 비활성화/활성화 명령으로 비활성화/활성화하거나 clear 명령어로 완전히 지울 수 있습니다.

(Pdb) disable 1c:\python36\fact.py:5(Pdb)에서 중단점 1 비활성화> 

Pdb 디버거는 Python 스크립트 내에서도 사용할 수 있습니다. 이렇게 하려면 스크립트 상단에서 pdb를 가져오고 프로그램 내부에서 set_trace() 메서드를 사용합니다.

import pdbdef fact(x):f =1for i in range(1,x+1):pdb.set_trace()print (i)f =f * ireturn fif __name__=="__main__":print("factorial of 3=",fact(3))

디버거의 동작은 명령줄 환경에서 찾은 것과 정확히 동일합니다.