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.