답변:
예! pdb
그것을하기위한 파이썬 디버거 가 있습니다!
당신은을 통해 파이썬 프로그램을 실행할 수 있습니다 pdb
사용 pdb myscript.py
하거나 python -m pdb myscript.py
.
그런 다음 실행할 수있는 몇 가지 명령이 있으며 pdb
페이지에 설명되어 있습니다.
기억해야 할 유용한 것들은 다음과 같습니다.
b
: 중단 점 설정c
: 중단 점에 도달 할 때까지 계속 디버깅s
: 코드 단계별n
: 다음 코드 줄로 이동l
: 현재 파일의 소스 코드를 나열합니다 (기본값 : 실행중인 행을 포함하여 11 행).u
: 스택 프레임을 탐색d
: 스택 프레임을 탐색p
: 현재 컨텍스트에서 표현식의 값을 인쇄합니다명령 행 디버거를 사용하지 않으려는 경우 Pydev , Wing IDE 또는 PyCharm 과 같은 일부 IDE 에는 GUI 디버거가 있습니다. Wing과 PyCharm은 상용 제품이지만 Wing은 무료 "Personal"버전을, PyCharm은 무료 커뮤니티 버전을 제공합니다.
pudb
는 훌륭합니다. 또한pydev
pdb
명령 줄 도구가 아닙니다. 사용하려면을 사용하십시오 python -m pdb your_script.py
.
pdb
명령이 python
패키지의 일부입니다 . 어쨌든 python -m <module>
과 같은 다른 것들의 표준이되고 pip
있으므로 기본적으로 사용하는 것이 가장 좋습니다.
첫 번째 단계는 파이썬 인터프리터가 디버깅 모드로 들어가도록하는 것입니다.
A. 명령 줄에서
파이썬 인터프리터의 명령 줄에서 실행하는 가장 직접적인 방법
$ python -m pdb scriptName.py
> .../pdb_script.py(7)<module>()
-> """
(Pdb)
B. 통역사
초기 버전의 모듈을 개발하면서 더 반복적으로 실험합니다.
$ python
Python 2.7 (r27:82508, Jul 3 2010, 21:12:11)
[GCC 4.0.1 (Apple Inc. build 5493)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> import pdb_script
>>> import pdb
>>> pdb.run('pdb_script.MyObj(5).go()')
> <string>(1)<module>()
(Pdb)
C. 프로그램 내에서
큰 프로젝트와 오래 실행되는 모듈의 경우 다음과 같이 import pdb 및 set_trace ()를 사용하여 프로그램 내부에서 디버깅을 시작할 수 있습니다 .
#!/usr/bin/env python
# encoding: utf-8
#
import pdb
class MyObj(object):
count = 5
def __init__(self):
self.count= 9
def go(self):
for i in range(self.count):
pdb.set_trace()
print i
return
if __name__ == '__main__':
MyObj(5).go()
보다 내부적으로 들어가기위한 단계별 디버깅
다음 문장을 실행하십시오… “n” (다음)
ENTER를 사용 하여 마지막 디버깅 명령 반복
“q”로 모든 것을 끝내는 중 (quit)
"p"를 사용하여 변수 값 인쇄 (인쇄)
a) 아빠
"c"를 사용하여 (Pdb) 프롬프트 끄기 (계속)
당신이있는 곳으로 ...보고 "L" (목록)
"s"를 사용하여 서브 루틴으로 스테핑 (step into)
계속… 그러나 현재 서브 루틴의 끝까지… “r” (return)
새로운 가치를 부여하십시오
a) ! b = "B"
중단 점 설정
a) 줄 번호
b) 기능 명을 깰
c) 파일 이름을 바꿉니다 : linenumber
임시 중단 점
a) 줄 번호
조건부 중단 점
a) 줄 번호, 조건
참고 : **이 모든 명령은 ** pdb에서 실행해야합니다.
자세한 지식은 다음을 참조하십시오.
https://pythonconquerstheuniverse.wordpress.com/2009/09/10/debugging-in-python/
Python 3.7부터 breakpoint()
내장 함수를 사용하여 디버거를 시작할 수 있습니다 .
foo()
breakpoint() # drop into the debugger at this point
bar()
기본적으로 breakpoint()
를 가져 와서 pdb
호출 pdb.set_trace()
합니다. 그러나 sys.breakpointhook()
환경 변수 를 통해 사용하거나 환경 변수를 사용 하여 디버깅 동작을 제어 할 수 있습니다 PYTHONBREAKPOINT
.
자세한 내용은 PEP 553 을 참조하십시오.
breakpoint
흥분했다. 그러나 나는 그것이 단지 지름길이라는 것을 알게되었고 그것은 import pdb; pdb.set_trace()
나를 슬프게했다. 파이썬은 DEVS : 기본 GDB와 PDB 개선에하시기 바랍니다 초점 :-) 상황에 맞는 선, 지속적인 명령 역사와 탭 자동 완성 기능 같은 기능
ipdb 는 pdb에 IPython 기능을 추가하여 다음과 같이 크게 개선되었습니다.
pdg와 마찬가지로 ipdb는 여전히 GDB와 비교할 때 완벽하고 완전히 기초적인 것은 아닙니다. 그러나 이미 pdb에 비해 크게 개선되었습니다.
사용법은와 유사 pdb
하므로 다음과 같이 설치하십시오.
python3 -m pip install --user ipdb
그런 다음 디버그를 수행하려는 줄에 추가하십시오.
__import__('ipdb').set_trace(context=21)
Vim snipmate 와 같은 편집기에서 바로 가기를 추가하고 싶을 것입니다.
snippet ipd
__import__('ipdb').set_trace(context=21)
입력 만하면 ipd<tab>
중단 점으로 확장됩니다. dd
모든 것이 한 줄에 들어 있기 때문에 쉽게 제거 할 수 있습니다.
context=21
에 설명 된대로 컨텍스트 라인 수를 증가시킵니다. 디버깅하는 동안 ipdb가 더 많은 컨텍스트 라인을 표시하도록하려면 어떻게해야합니까?
또는 다음과 같이 처음부터 프로그램을 디버그 할 수도 있습니다.
ipdb3 main.py
그러나 일반적으로 다음과 같은 이유로 그렇게하고 싶지 않습니다.
또는 원시 pdb 3.2+에서와 같이 명령 행에서 몇 가지 중단 점을 설정할 수 있습니다.
ipdb3 -c 'b 12' -c 'b myfunc' ~/test/a.py
하지만 -c c
어떤 이유로 고장 : https://github.com/gotcha/ipdb/issues/156
python -m module
디버깅이 요청되었습니다 : 명령 줄에서 python -m으로 실행되는 Python 모듈을 디버깅하는 방법은 무엇입니까? 파이썬 3.7은 다음과 같이 할 수 있습니다.
python -m pdb -m my_module
GDB와 비교하여 pdb와 ipdb의 심각한 누락 기능 :
ipdb 특정 성가심 :
우분투 16.04, ipdb == 0.11, Python 3.5.2에서 테스트되었습니다.
breakpoint()
요즘에는 방법 이 존재 합니다.import pdb; pdb.set_trace()
.
또한 가능한 환경 변수와 같은 몇 가지 새로운 기능 이 있습니다 .
통합 디버거가있는 IDE를 원한다면 PyScripter를 사용해보십시오 .
https://wiki.python.org/moin/PythonDebuggingTools
pudb는 pdb를 대체하는 좋은 대안입니다.
Python Tutor 는 초보자를위한 온라인 단일 단계 디버거입니다. 편집 페이지 에 코드 를 입력 한 후 "Visualize Execution"을 클릭하여 실행을 시작할 수 있습니다.
무엇보다도 다음을 지원합니다.
그러나 그것은 또한 많은 것들을 지원하지 않습니다 .
io.StringIO
및 io.BytesIO
: 대신 데모프로그래밍 방식으로 파이썬 코드를 단계별로 추적하고 추적하는 것도 가능합니다. 자세한 내용 은 sys.settrace () 설명서를 참조하십시오. 시작하기위한 자습서 도 있습니다 .
PTVS가 포함 된 Visual Studio는 다음과 같은 옵션이 될 수 있습니다. http://www.hanselman.com/blog/OneOfMicrosoftsBestKeptSecretsPythonToolsForVisualStudioPTVS.aspx
PyCharm은 디버거를 포함하는 Python 용 IDE입니다. PyCharm의 디버거를 사용하여 코드를 단계별로 소개하는 YouTube 비디오를 시청하십시오.
PyCharm 튜토리얼-PyCharm을 사용하여 파이썬 코드 디버깅
참고 : 이것은 보증하거나 검토하기위한 것이 아닙니다. PyCharm은 유료 제품이지만, 회사는 학생과 교사에게 무료 라이센스를 제공하며 무료 및 공개 소스 인 "경량"커뮤니티 버전을 제공합니다.