Estou procurando uma maneira de imprimir a pilha de chamadas em PHP.
Pontos de bônus se a função liberar o buffer de E / S.
php
stack-trace
error-logging
Justin
fonte
fonte
Respostas:
Se você deseja gerar um backtrace, está procurando
debug_backtrace
e / oudebug_print_backtrace
.O primeiro, por exemplo, fornece uma matriz como esta (citando o manual) :
Aparentemente, eles não liberarão o buffer de E / S, mas você pode fazer isso sozinho, com
flush
e / ouob_flush
.(consulte a página de manual do primeiro para descobrir por que o "e / ou" ;-))
fonte
DEBUG_BACKTRACE_IGNORE_ARGS
parâmetros opcionais ; que os torna funcionalmente equivalentes a #(new \Exception())->getTraceAsString()
Mais legível que
debug_backtrace()
:fonte
debug_backtrace
para retornar apenas o primeiro nível no stacktrace - essa solução faz o trabalho para mim. Obrigado!print_r
reterá todas as mensagens.Para registrar o rastreio
Obrigado @Tobiasz
fonte
O Backtrace despeja um monte de lixo que você não precisa. Demora é muito longo, difícil de ler. Tudo o que você sempre quer é "o que chamou de onde?" Aqui está uma solução simples de função estática. Eu costumo colocá-lo em uma classe chamada 'debug', que contém todas as minhas funções do utilitário de depuração.
Você chama assim:
E produz resultados como este:
fonte
Estranho que ninguém postou desta maneira:
Na verdade, isso imprime o backtrace sem o lixo - exatamente como o método foi chamado e onde.
fonte
Se você deseja um rastreamento de pilha que seja muito semelhante a como o php formata o rastreamento de pilha de exceção, use esta função que escrevi:
Isso retornará um rastreamento de pilha formatado assim:
fonte
$e = new Exception; echo $e->getTraceAsString();
Isso faz o que você quer?
fonte
Veja
debug_print_backtrace
. Acho que você pode ligarflush
depois, se quiser.fonte
O phptrace é uma ótima ferramenta para imprimir a pilha do PHP a qualquer momento e sem instalar extensões.
Existem duas funções principais do phptrace: primeiro, imprimir a pilha de chamadas do PHP que não precisa instalar nada; segundo, rastrear os fluxos de execução do php que precisam instalar a extensão que ele fornece.
do seguinte modo:
fonte
Use
debug_backtrace
para obter um histórico de quais funções e métodos foram chamados e quais arquivos foram incluídos que levaram ao ponto emdebug_backtrace
que foram chamados.fonte
dê uma olhada nesta classe de utilitários, pode ser útil:
Uso:
Classe de origem: https://github.com/augustowebd/utils/blob/master/Who.php
fonte
debug_backtrace()
fonte
Você pode querer examinar
debug_backtrace
, ou talvezdebug_print_backtrace
.fonte
A solução do Walltearer é excelente, principalmente se incluída em uma etiqueta 'pre':
- que define as chamadas em linhas separadas, numeradas ordenadamente
fonte
I se adaptaram a resposta de Don Briggs acima para usar o log de erro interno em vez de imprimir pública, que pode ser a sua grande preocupação quando se trabalha em um servidor ao vivo. Além disso, foram adicionadas mais algumas modificações, como a opção de incluir o caminho completo do arquivo em vez do nome básico (porque, pode haver arquivos com o mesmo nome em caminhos diferentes) e também (para aqueles que precisam) uma saída completa da pilha de nós:
fonte