Python 디 버 깅 프로그램 충돌 오류

문제.
당신 의 프로그램 이 붕 괴 된 후에 어떻게 그것 을 디 버 깅 해 야 합 니까?
해결 방안
프로그램 이 이상 으로 인해 무 너 지면 간단 한 디 버 깅 을 실행 할 수 있 습 니 다.-i 옵션 을 사용 하면 프로그램 이 끝 난 후에 대화 식 셸 을 열 수 있 습 니 다.그리고 환경 을 볼 수 있 습 니 다.예 를 들 어 다음 코드 가 있다 고 가정 하 십시오.

# sample.py

def func(n):
 return n + 10

func('Hello')
실행 python3 -i someprogram.py 은 다음 과 같은 출력 이 있 습 니 다.

bash % python3 -i sample.py
Traceback (most recent call last):
 File "sample.py", line 6, in <module>
 func('Hello')
 File "sample.py", line 4, in func
 return n + 10
TypeError: Can't convert 'int' object to str implicitly
>>> func(10)
20
>>>
위 와 같은 것 이 보이 지 않 는 다 면 프로그램 이 붕 괴 된 후에 Python 디 버 거 를 열 수 있 습 니 다.예 를 들 면:

>>> import pdb
>>> pdb.pm()
> sample.py(4)func()
-> return n + 10
(Pdb) w
 sample.py(6)<module>()
-> func('Hello')
> sample.py(4)func()
-> return n + 10
(Pdb) print n
'Hello'
(Pdb) q
>>>
코드 가 있 는 환경 에서 대화 셸(예 를 들 어 특정한 서버 위)을 얻 기 어렵다 면 이상 을 포착 한 후에 스스로 추적 정 보 를 인쇄 할 수 있 습 니 다.예 를 들 면:

import traceback
import sys

try:
 func(arg)
except:
 print('**** AN ERROR OCCURRED ****')
 traceback.print_exc(file=sys.stderr)
프로그램 이 무 너 지지 않 고 이해 할 수 없 는 결과 가 나 왔 다 면 관심 있 는 곳 에python3 -i sample.py 문 구 를 삽입 하 는 것 도 좋 은 선택 이다.하지만 당신 이 이렇게 하려 고 한다 면 작은 기술 이 당신 을 도 울 수 있 습 니 다.우선,print() 함 수 는 프로그램 이 그 지점 까지 실 행 될 때 추적 창 고 를 만 듭 니 다.예 를 들 면:

>>> def sample(n):
...  if n > 0:
...    sample(n-1)
...  else:
...    traceback.print_stack(file=sys.stderr)
...
>>> sample(5)
 File "<stdin>", line 1, in <module>
 File "<stdin>", line 3, in sample
 File "<stdin>", line 3, in sample
 File "<stdin>", line 3, in sample
 File "<stdin>", line 3, in sample
 File "<stdin>", line 3, in sample
 File "<stdin>", line 5, in sample
>>>
또한 아래 와 같이traceback.print_stack() 어디서 든 수 동 으로 디 버 거 를 시작 할 수 있 습 니 다.

import pdb

def func(arg):
 ...
 pdb.set_trace()
 ...
프로그램 이 비교적 크 고 제어 프로 세 스 와 함수 인 자 를 디 버 깅 하고 싶 을 때 이것 이 비교적 유용 하 다.예 를 들 어 디 버 거 가 실행 되 기 시작 하면 print 를 사용 하여 변수 값 을 관찰 하거나 w 와 같은 명령 을 두 드 려 추적 정 보 를 얻 을 수 있 습 니 다.
토론 하 다.
디 버 깅 을 너무 복잡 하 게 만 들 지 마라.일부 간단 한 오 류 는 프로그램 스 택 정 보 를 관찰 하면 알 수 있 습 니 다.실제 오 류 는 보통 스 택 의 마지막 줄 입 니 다.개발 할 때 디 버 깅 이 필요 한 곳 에 pdb.set_trace() 함 수 를 삽입 하여 정 보 를 진단 할 수 있 습 니 다(마지막 으로 발표 할 때 이 인쇄 문 구 를 삭제 하면 됩 니 다).
디 버 거 의 일반적인 용법 은 무 너 진 함수 의 변 수 를 관찰 하 는 것 이다.함수 가 붕 괴 된 후에 디 버 거 에 들 어 가 는 방법 을 아 는 것 은 매우 유용 한 기능 이다.
매우 복잡 한 절 차 를 해부 하고 싶 을 때 밑바닥 의 통제 논 리 를 잘 모 를 때print() 라 는 문 구 를 삽입 하면 매우 유용 하 다.
실제로 프로그램 은pdb.set_trace() 문 구 를 만 날 때 까지 계속 실행 한 뒤 바로 디 버 거 에 들어간다.그리고 더 많은 일 을 할 수 있 을 거 야.
만약 IDE 를 사용 하여 Python 개발 을 한다 면,일반적으로 IDE 는 pdb 대신 자신의 디 버 거 를 제공 합 니 다.더 많은 정 보 는 당신 이 사용 하 는 IDE 매 뉴 얼 을 참고 할 수 있 습 니 다.
이상 은 파 이 썬 이 프로그램 충돌 오 류 를 어떻게 디 버 깅 하 는 지 에 대한 상세 한 내용 입 니 다.파 이 썬 디 버 깅 프로그램 충돌 오류 에 관 한 자 료 는 다른 관련 글 에 주목 하 십시오!

좋은 웹페이지 즐겨찾기