코드의 메서드에서 현재 콜스택 인쇄
Python에서는 (디버깅을 위해) 메서드 내에서 현재의 콜스택을 인쇄하려면 어떻게 해야 합니까?
다음으로 트레이스백모듈을 통해 스택을 취득하여 인쇄하는 예를 나타냅니다.
import traceback
def f():
g()
def g():
for line in traceback.format_stack():
print(line.strip())
f()
# Prints:
# File "so-stack.py", line 10, in <module>
# f()
# File "so-stack.py", line 4, in f
# g()
# File "so-stack.py", line 7, in g
# for line in traceback.format_stack():
스택을 stderr에만 인쇄하는 경우 다음을 사용할 수 있습니다.
traceback.print_stack()
또는 stdout으로 인쇄하려면(리다이렉트된 출력을 함께 보관하는 경우 유용함) 다음을 사용합니다.
traceback.print_stack(file=sys.stdout)
하지만 그것을 얻는 것은traceback.format_stack()원하는 대로 사용할 수 있습니다.
import traceback
traceback.print_stack()
inspect.stack()는 예외 트레이스백이 아닌 현재 스택을 반환합니다.
import inspect
print inspect.stack()
log_stack 유틸리티 함수에 대해서는http://https://gist.github.com/FredLoney/5454553 를 참조해 주세요.
pdb를 사용하는 동안 콜스택을 인쇄해야 하는 경우
(Pdb) where
python 디버거를 사용하면 변수의 인터랙티브 프로빙뿐만 아니라 "where" 명령 또는 "w" 명령으로 콜 스택을 얻을 수 있습니다.
그래서 프로그램 맨 위에
import pdb
그리고 무슨 일이 일어나는지 보고 싶은 코드에서
pdb.set_trace()
프롬프트가 뜨면
원하는 기능에 선택적으로 적용할 수 있는 데코레이터를 구현한 @RichieHindle의 훌륭한 답변의 변형입니다.Python 2.7.14 및 3.6.4와 호환됩니다.
from __future__ import print_function
import functools
import traceback
import sys
INDENT = 4*' '
def stacktrace(func):
@functools.wraps(func)
def wrapped(*args, **kwds):
# Get all but last line returned by traceback.format_stack()
# which is the line below.
callstack = '\n'.join([INDENT+line.strip() for line in traceback.format_stack()][:-1])
print('{}() called:'.format(func.__name__))
print(callstack)
return func(*args, **kwds)
return wrapped
@stacktrace
def test_func():
return 42
print(test_func())
샘플 출력:
test_func() called:
File "stacktrace_decorator.py", line 28, in <module>
print(test_func())
42
인스펙션 설치
pip3 install inspect-it --user
코드
import inspect;print(*['{:40}| {}:{}\n'.format(x.function, x.filename, x.lineno) for x in inspect.stack()])
이 줄의 일부를 만들 수 있습니다.
기능 콜 스택의 리스트와 파일명과 회선 번호가 표시됩니다.
이 행의 시작부터 시작 위치까지 나열
언급URL : https://stackoverflow.com/questions/1156023/print-current-call-stack-from-a-method-in-code
'source' 카테고리의 다른 글
| Python에서 확장자가 .txt인 디렉토리에서 모든 파일 찾기 (0) | 2022.11.24 |
|---|---|
| MySQL 계층 재귀 쿼리를 만드는 방법 (0) | 2022.11.24 |
| 표준 입력에서 한 줄씩 읽는 방법 (0) | 2022.11.24 |
| MySQL에서 쿼리 실행을 중지, 중단 또는 중단하려면 어떻게 해야 합니까? (0) | 2022.11.24 |
| JavaScript를 사용하여 어레이를 삽입하시겠습니까? (0) | 2022.11.24 |