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 매 뉴 얼 을 참고 할 수 있 습 니 다.
이상 은 파 이 썬 이 프로그램 충돌 오 류 를 어떻게 디 버 깅 하 는 지 에 대한 상세 한 내용 입 니 다.파 이 썬 디 버 깅 프로그램 충돌 오류 에 관 한 자 료 는 다른 관련 글 에 주목 하 십시오!
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Python의 None과 NULL의 차이점 상세 정보그래서 대상 = 속성 + 방법 (사실 방법도 하나의 속성, 데이터 속성과 구별되는 호출 가능한 속성 같은 속성과 방법을 가진 대상을 클래스, 즉 Classl로 분류할 수 있다.클래스는 하나의 청사진과 같아서 하나의 ...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.