2009-10-21 4 views
5

메소드 정의가없는 스크립트에서 setTrace() 함수를 사용하는 방법이 있습니까? 즉Python의 setTrace()

for i in range(1, 100): 
    print i 

def traceit(frame, event, arg): 
    if event == "line": 
     lineno = frame.f_lineno 
     print "line", lineno 

return traceit 

sys.settrace(traceit) 

그렇게 이상적으로 나는 추적 기능은 루프에서 실행되는 코드의 모든 반복/라인에 호출 할 것이다. 이전에 메소드 정의가있는 스크립트로이 작업을 수행했지만이 인스턴스에서 작동하도록하는 방법을 모르겠습니다.

답변

2

settrace()는 디버거 구현에만 사용됩니다. 이 프로그램을 디버깅하는 데 사용하는 경우 PDB를 사용하는 것이 더 나을 수 있습니다.

설명서에 따르면 settrace()는 원하는 것을 수행하지 않습니다.

이 줄 단위의 추적을 실제로 수행하려면 파이썬 컴파일러에서 생성 된 AST 추상 구문 트리에 액세스하고 수정할 수있는 컴파일러 패키지를 살펴보십시오. 이를 사용하여 실행을 추적하는 함수에 호출을 삽입 할 수 있어야합니다.

2

나는 단지 그들 모두를 지배하는 하나 개의 간단한 구문 줄을 사용하면 실행을 중단하고 디버깅을 시작하여 원하는 목적지

import pdb; pdb.set_trace() 

그것을 넣습니다. pdb 명령을 사용하십시오 (다음에 n, 목록에 l 등).

건배,

H.