>  기사  >  백엔드 개발  >  Linux 환경에서 pdb를 사용하여 Python을 디버깅하는 방법

Linux 환경에서 pdb를 사용하여 Python을 디버깅하는 방법

小云云
小云云원래의
2018-03-30 16:20:492822검색


pdb는 Python과 함께 제공되는 패키지로 Python 프로그램에 대한 대화형 소스 코드 디버깅 기능을 제공합니다. 주요 기능에는 중단점 설정, 단일 단계 디버깅, 함수 디버깅 입력, 현재 코드 보기, 스택 조각 보기 및 동적으로 변경이 포함됩니다. 변수값 등 pdb는 일반적으로 사용되는 디버깅 명령을 제공합니다. + >                                                                                                r pdb test.py

다음은 구체적인 예를 사용하여 설명합니다. 디버깅을 위해 pdb를 사용하는 방법.


목록 1. 테스트 코드 예제
import pdb
a = "aaa"
pdb.set_trace()
b = "bbb"
c = "ccc"
final = a + b + c
print final

목록 2. pdb를 사용하여 디버깅
[root@rcc-pok-idg-2255 ~]# python epdb1.py
> /root/epdb1.py(4)?()
-> b = "bbb"
Pdb ) n
> /root/epdb1.py(5)?()
-> c = "ccc"
(Pdb)
> /root/epdb1.py(6)?()
-> final = a + b + c
(Pdb) 목록
1 import pdb
2 a = "aaa"
3 pdb.set_trace() 4 b = "bbb"
5 c = "ccc"
6 -> a + b + c
7 인쇄 최종
[EOF]
(Pdb)
[EOF]
(Pdb) n
> /root/epdb1.py(7)?()
-> )

변수 값 인쇄: 디버깅 중에 변수 값을 인쇄해야 하는 경우 p와 변수 이름을 직접 사용할 수 있지만 인쇄는 현재 명령문 이후의 특정 값만 볼 수 있다는 점에 유의해야 합니다. 그렇지 않으면 NameError: af928453420aa7a0d1304df4642bff31

목록 3. 디버그 프로세스 중 변수 인쇄
[root@rcc-pok-idg-2255 ~]# python epdb1.py
> /root/epdb1.py(4)?()
-> bbb"
(Pdb) n
> /root/epdb1.py(5)?()
-> c = "ccc"
(Pdb) p b
'bbb'
(Pdb)
'bbb'
( Pdb) n
> /root/epdb1.py(6)?()
-> final = a + b + c
(Pdb) pc
'ccc'
(Pdb) p final
*** 이름 오류: 84659ff411235a033473884fa7236efa
(Pdb) n
> /root/epdb1.py(7)?()
-> 최종 인쇄
(Pdb) p 최종
'aaabbbcc'
(Pdb)

현재 디버그를 중지하고 프로그램이 계속 실행되도록 하려면 c를 사용하세요. 다음 프로그램에 set_statement()의 추가 문이 있으면 디버그 상태로 다시 들어갑니다. 독자는 코드 인쇄 최종 전에 set_trace() 확인을 추가할 수 있습니다.


목록 4. 디버깅을 중지하고 프로그램 실행을 계속합니다
[root@rcc-pok-idg-2255 ~]# python epdb1.py
> /root/epdb1.py(4)?()
-> b = "bbb"
(Pdb) n
> /root/epdb1.py(5)?()
-> c = "ccc"
(Pdb) c
aaabbbccc

코드 표시: 디버깅 중에 현재 코드 블록이 기억되지 않을 수 있습니다. 특정 코드 블록을 보려면 list 또는 l 명령을 사용하여 표시할 수 있습니다. 목록에서는 -> 화살표를 사용하여 현재 디버그 문을 가리킵니다.

목록 6. 디버그 프로세스 중에 표시되는 코드
[root@rcc-pok-idg-2255 ~]# python epdb1.py
> /root/epdb1.py(4)?()
-> bbb"
(Pdb) 목록
1 "pdb 가져오기
2 a = "aaa"
3 pdb.set_trace()
4 -> b = "bbb"
5 c = "ccc"
6 final = a + b + c
7   pdb.set_trace()
8   최종 인쇄
[EOF]
(Pdb) c
> /root/epdb1.py(8)?()
-> 최종 인쇄
(Pdb) 목록
3 pdb .set_trace() 4 )


함수 사용 시 디버그


목록 6. 함수 사용 예
import pdb
def Combine(s1,s2): # 서브루틴 결합을 정의합니다.
s3 = s1 + s2 + s1 # s1의 복사본 사이에 s2를 삽입합니다. ...
s3 = '"' + s3 +'"' # 큰따옴표로 묶습니다...
return s3 # 그리고
a = "aaa"를 반환합니다.
pdb.set_trace ()
b = "bbb"
c = "ccc"
final = Combine(a,b)
print final


n을 직접 디버깅에 사용하면 final=combine 문장이 나옵니다. (a,b) 이를 일반적인 할당문으로 취급하고 print final을 입력합니다. 기능을 디버깅하려면 s를 직접 사용하여 기능 블록에 들어갈 수 있습니다. 함수의 단일 단계 디버깅은 위의 소개와 유사합니다. 함수를 단계별로 실행하고 싶지 않으면 중단점에서 직접 r을 눌러 호출 위치로 나갈 수 있습니다.

清单 7. 对函数进行 debug
[root@rcc-pok-idg-2255 ~]# python epdb2.py 
 > /root/epdb2.py(10)?() 
 -> b = "bbb"
 (Pdb) n 
 > /root/epdb2.py(11)?() 
 -> c = "ccc"
 (Pdb) n 
 > /root/epdb2.py(12)?() 
 -> final = Combine(a,b) 
 (Pdb) s 
 --Call-- 
 > /root/epdb2.py(3)combine() 
 -> def Combine(s1,s2):      # 서브루틴 결합을 정의합니다. 이는... 
 (Pdb) n 
 > /root/epdb2.py(4)combine() 
 -> s3 = s1 + s2 + s1    # s1의 복사본 사이에 s2를 삽입합니다. ... 
 (Pdb) 목록 
  1     import pdb 
  2 
  3     def Combine(s1,s2):      # 서브루틴 결합 정의... 
  4 ->     s3 = s1 + s2 + s1    # s1의 복사본 사이에 s2를 삽입합니다. ... 
  5         s3 = '"' + s3 +'"'   # 큰따옴표로 묶고... 
  6         return s3            # 반환합니다. 
  7 
  8     a = "aaa"
  9     pdb.set_trace() 
 10     b = "bbb"
 11     c = "ccc"
 (Pdb) n 
 > /root/epdb2.py(5)combine() 
 -> s3 = '"' + s3 +'"'   #은 큰따옴표로 묶습니다... 
 (Pdb) n 
 > /root/epdb2.py(6)combine() 
 -> return s3            # 하고 반환합니다. 
 (Pdb) n 
 --반환-- 
 > /root/epdb2.py(6)combine()->'"aaabbbaaa"'
 -> return s3            # 하고 반환합니다. 
 (Pdb) n 
 > /root/epdb2.py(13)?() 
 -> 최종 인쇄
 (Pdb)


에서的是下面有个错误,原因是 b 已经被赋值了,如果想试的时候候态改变值
[root@rcc-pok-idg-2255 ~]# python epdb2.py 

> /root/epdb2.py(10)?() 
 -> b = "bbb"
 (Pdb) var = "1234"
 (Pdb) b = "avfe"
 *** The specified object '= "avfe"' is not a function 
 or was not found along sys.path. 
 (Pdb) !b="afdfd"
 (Pdb)

상关推荐:

사용Pdb库调试Python적 방법:Python사용형 PDB简单调试Python程序简明指南

위 내용은 Linux 환경에서 pdb를 사용하여 Python을 디버깅하는 방법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.