nosetests --pdb 옵션으로 중단 점 설정


88

nosetests --pdb오류나 실패시 중단하겠습니다. 그러나 이것은 제 요구에 비해 너무 늦었습니다. 실행 중에 코드를 단계별로 실행하면 문제가있는 곳을 디버깅하는 데 도움이됩니다.

그러나 nosetest는 상대적 가져 오기에 의존하는 테스트 (즉, 패키지의 테스트)를 허용하므로 유용합니다.

테스트가 실행되기 전에 중단 점을 어떻게 설정할 수 있습니까? 현재 나는 다음을 사용하고 있습니다.

python -m pdb /path/to/my/nosetests testfile.py

이 솔루션은 적절하지 않습니다. Nosetest는 pdb 출력을 방해하고 키보드 컨트롤 (예 : 화살표 키)이 손상되었습니다.

import pdb 사용; pdb.set_trace ()가 좋은 생각처럼 보이지만 nosetests가 pdb 콘솔에 대한 액세스를 차단하고 있습니다.

답변:


120

추가 할 수 있습니다.

import pdb; pdb.set_trace() 

디버거에서 중지하려는 소스의 모든 위치.

-s코가 잡히지 않도록 코 를 통과해야합니다 stdout.


나는 이것을 내 질문에 추가하려고했습니다. 이것은 수용 가능한 솔루션도 아닙니다. nosetest와 함께 이것을 사용하면 pdb 콘솔에 대한 액세스가 차단되고 pdb 명령을 실행할 수 없기 때문에 문자 그대로 사용할 수 없음이 분명합니다.
— Devin

26
-s 플래그를 nosetests에 추가하여 stdout을 캡처하는 것을 방지하면 pdb를 잘 사용할 수 있습니다.
— Ned Batchelder

1
작동하지 않습니다. 이것을 사용하십시오 :from nose.tools import set_trace; set_trace()
— anilbey

143

-s사용하는 것을 기억하는 것보다 더 좋은 것은 set_traceNose와 함께 제공 되는 변형 을 사용 하는 것입니다. 더하다

from nose.tools import set_trace; set_trace()

디버거에 침입하고 싶은 곳이면 어디든. stdin / out 리디렉션이 처리됩니다. 내가 만난 유일한 이상한 부작용 run은 코 실행 중에 디버깅하는 동안 pdb 내에서 코드를 다시 시작할 수 없다는 것입니다 (사용 ).


이것에 대한 문서가 있습니까? 루프 밖으로 이동하는 방법?
— AJ

pdb달리고 나면 탐색하는 방법을 의미 합니까? 나는 문서가 있다고 확신하지만, 머릿속 s에서 함수 호출을 "들어가고" n"다음"문으로 u이동하고 스택에서 "위로" d이동하고 "아래로"이동합니다. b중단 점을 설정하고 c"계속"하고 스테핑 디버거를 종료하는 데 사용할 수 있습니다 . 도움이 되었기를 바랍니다.
— Matt Luongo

4
이것은 받아 들여진 대답이어야합니다. 원래 pdb.set_trace () 명령의 모든 일반 기능을 제공합니다.
— tbm

이것의 ipython / ipdb 버전에 대한 가능성이 있습니까?
— gerrit

5

ipython 이있는 경우 무제한 굉장함을 사용하려면 다음을 사용하십시오.

import ipdb; ipdb.set_trace() 

* 무제한 굉장함 : ipython처럼-자동 완성, 채색 등


1

pytest 를 사용하는 경우 다음을 사용할 수 있습니다.

import pytest; pytest.set_trace()

설명서를 참조하십시오 .

당사 사이트를 사용함과 동시에 당사의 쿠키 정책과 개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.