programing

pdb.set_trace ()로 인해 nosetest가 중지되고 디버거로 떨어지지 않습니다.

procenter 2021. 1. 14. 23:22
반응형

pdb.set_trace ()로 인해 nosetest가 중지되고 디버거로 떨어지지 않습니다.


nosetests를 사용하여 테스트 모음 (.py 파일)을 실행하고 있습니다. 클래식 사용

import pdb; pdb.set_trace()

코 테스트 실행은 결코 완료되지 않습니다. 중단 점이 설정된 곳에서 바로 중단되지만 pdb 디버거로 떨어지지 않습니다.

이것이 왜 그런지 아이디어가 있습니까? 중단 점을 여러 다른 위치 (다른 테스트 기능, 다른 파일)로 이동하여 아무 소용이 없도록 시도했습니다.


-s/ --nocapture옵션으로 nose를 실행 하면 pdb 프롬프트를보고 정상적으로 디버거와 상호 작용할 수 있습니다.

명령 줄을 사용하는 경우 다음을 의미합니다.

python manage.py  test -s [other-opts-and-args]

Nose는 출력을 캡처하고 리디렉션합니다. 그래서, 중단 점이 적중되었지만 여러분은 그것을 볼 수 없습니다. 디버그 출력이 화면에 표시되도록 출력 리디렉션을 꺼야합니다.

다음을 사용하면 코가이 작업을 수행 할 수 있습니다.

from nose.tools import set_trace; set_trace()

대신에:

import pdb;pdb.set_trace()

제 경우에는 플래그 -s /-nocapture 플래그가 여전히 문제를 해결하지 못하고 컴파일러를 pdb에 놓았습니다.

살펴볼 수있는 또 다른 이유는 MySQL과 같은 데이터베이스를 테스트의 일부로 사용하는 경우 다른 동시 프로세스에 의해 잠겨 있지 않다는 것입니다. 제 경우에는 SQL Alchemy를 통해 MySQL 데이터베이스를 쿼리하기 위해 Python 셸을 시작했으며 테이블을 잠갔습니다. 그 결과, 내 코 테스트가 멈췄습니다.

나는 테이블을 잠그는 파이썬 프로세스를 죽였고 Nose는 스니핑을 백업했습니다.

> $ ps auxww | grep 파이썬 | awk '{print $ 2}'| sudo xargs kill -9

참조 URL : https://stackoverflow.com/questions/9013728/pdb-set-trace-causing-frozen-nosetests-does-not-drop-into-debugger

반응형