'exec'로 실행하는 파이썬 스크립트가 있습니다. 스크립트에서 함수를 호출 할 때 해당 호출에 대해 줄 번호와 줄 간격을 알고 싶습니다.런타임시 파이썬 스크립트 라인에서 함수 호출 확인하기
다음은 예입니다. 내 스크립트 인 경우 :
foo1(); foo2(); foo1()
foo3()
그리고 모든 기능의 인쇄 (라인, 오프셋) 코드가 있다면, 나는 가야이 쉽게 스택을 받고하여 수행 할 수 있습니다 대부분의 경우
(0,0), (0,8), (0,16), (1,0)
프레임에 줄 번호와 함수 이름이 포함되어 있기 때문에. 유일한 문제는 특정 줄에 같은 이름의 함수가 두 개있는 경우입니다. 불행히도 이것은 나를위한 일반적인 경우입니다. 어떤 아이디어?
좋아요. 원래 코드를 변경하는 것이 가장 간단한 해결책입니다.
당신은
if foo1(7) or foo1(6):
또는
foo2(foo1(), foo1())
같은 것들을 해결할 방법이 몇 가지 매우 우아하지 솔루션은 예를 들어, 자동으로 앞의 예를 도는 있습니다
def curpos(pos, func):
record_curpos(pos)
return func
curpos(foo2,0)(curpos(foo1,5)(), curpos(foo1,13)())
간단한 아이디어가 있으면 알려주세요.
사실, 바이트 코드 재 작성은 다른 게시물에있었습니다 : http://nedbatchelder.com/blog/200804/wicked_hack_python_bytecode_tracing.html (나는 지점 커버리지를 얻으 려하지 않았다.) –
감사합니다. 매우 관련성이 높고 (흥미 롭다) – Dani