No Python, como posso imprimir a pilha de chamadas atual de dentro de um método (para fins de depuração).
python
debugging
stack-trace
a si mesmo
fonte
fonte
sys._current_frames()
. Por exemplo, py_better_exchookdump_all_thread_tracebacks
faz isso (aviso: eu escrevi isso).fonte
traceback.print_exc()
que lhe dá quase a mesma coisa que você obteria sem aexcept
declaração (e também é menos codificadora do que a resposta aceita).traceback.print_exc()
imprime o rastreamento de pilha para qualquer exceção que você possa estar manipulando - mas isso não resolve a questão original, que é como imprimir a pilha atual ("onde você está agora", em vez de "onde estava o seu código quando a última exceção ocorreu" off, se houver ".)inspect.stack()
retorna a pilha atual em vez da exceção traceback:Consulte https://gist.github.com/FredLoney/5454553 para obter uma função do utilitário log_stack.
fonte
Se você usar o depurador python, não apenas investigará interativamente as variáveis, mas poderá obter a pilha de chamadas com o comando "where" ou "w".
Então, no topo do seu programa
Em seguida, no código em que você deseja ver o que está acontecendo
e você cai em um prompt
fonte
where
?(pdb)
digitewhere
e ele imprimirá o rastreamento da pilha no terminal.breakpoint()
que evita a necessidade de importar o pdb.para quem precisa imprimir a pilha de chamadas enquanto usa o pdb, basta
fonte
Aqui está uma variação da excelente resposta do @ RichieHindle, que implementa um decorador que pode ser aplicado seletivamente às funções conforme desejado. Funciona com o Python 2.7.14 e 3.6.4.
Saída da amostra:
fonte
Instale o Inspecione
Código
você pode criar um trecho dessa linha
mostrará uma lista da pilha de chamadas de função com um nome de arquivo e um número de linha
lista do início até onde você coloca esta linha
fonte