2011-02-09 6 views
68

Nosetests --pdb 오류나 실패시 중단하겠습니다.하지만 이것은 내 요구에 너무 늦었습니다. 실행 중에 코드를 단계별로 실행하면 문제가있는 곳에서 디버깅 할 수 있습니다.nosetests --pdb 옵션을 사용하여 중단 점을 설정하십시오.

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

테스트를 실행하기 전에 어떻게 중단 점을 설정할 수 있습니까? 현재 사용하고 있습니다 :

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

이 해결책은 적절하지 않습니다. Nosetests가 pdb 출력을 방해하고 키보드 컨트롤 (예 : 화살표 키)이 깨졌습니다.

import pdb를 사용 중입니다. pdb.set_trace()는 좋은 생각 인 것 같지만, nosetests는 pdb 콘솔에 대한 나의 액세스를 차단하고 있습니다.

답변

92

당신은 당신이 디버거에서 중지 할 소스에

import pdb; pdb.set_trace() 

어디든지 추가 할 수 있습니다.

-s을 코에 전달하여 stdout을 캡처하지 않도록하십시오.

+0

는 내 질문에이를 추가 할 수 막이었다. 이것은 수용 가능한 해결책이 아닙니다. 이것을 nosetests와 함께 사용하면 pdb 콘솔에 대한 액세스가 차단되고 pdb 명령을 실행할 수 없으므로 문자 그대로 사용할 수 없다는 것이 확실합니다. – Devin

+14

nosetests에 -s 플래그를 추가하여 stdout을 캡처하지 못하도록하면 pdb를 사용할 수 있습니다. –

+1

그러나 이것은 중단 점에는 유용하지 않습니다. – SkyLeach

118

-s을 기억하는 것보다 더 나은 것은 Nose와 함께 제공되는 set_trace 변형을 사용하는 것입니다. 디버거에 침입하고 싶을 때마다

from nose.tools import set_trace; set_trace() 

을 추가하십시오. stdin/out 리디렉션이 처리됩니다. 내가 실행 한 유일한 이상한 부작용은 코 실행 중에 디버깅하는 동안 pdb (run 사용)에서 코드를 다시 시작할 수 없다는 것입니다. 당신이 ipython이있는 경우

+0

@Devin 혹시이 문제가 해결 되었습니까? –

+6

이것은 완전히 나를 위해 일했습니다. :) 감사합니다 매트! – bitcycle

+0

이것에 대한 문서가 있습니까? 루프에서 벗어나는 방법? – Clayton

1

는 무제한의 awesomeness 사용을 위해 :

import ipdb; ipdb.set_trace() 
관련 문제