Szukam sposobu na wydrukowanie stosu wywołań w PHP.
Punkty bonusowe, jeśli funkcja opróżnia bufor IO.
php
stack-trace
error-logging
Justin
źródło
źródło
Odpowiedzi:
Jeśli chcesz wygenerować ślad, szukasz
debug_backtrace
i / lubdebug_print_backtrace
.Pierwszy, na przykład, da ci tablicę taką jak ta (cytując instrukcję) :
Najwyraźniej nie będą opróżniać bufora we / wy, ale możesz to zrobić samodzielnie, za pomocą
flush
i / lubob_flush
.(zobacz stronę podręcznika pierwszego, aby dowiedzieć się, dlaczego „i / lub” ;-))
źródło
DEBUG_BACKTRACE_IGNORE_ARGS
parametrów; dzięki czemu są funkcjonalnie równoważne z(new \Exception())->getTraceAsString()
Bardziej czytelny niż
debug_backtrace()
:źródło
debug_backtrace
aby zwrócić tylko pierwszy poziom w stacktrace - to rozwiązanie działa dla mnie. Dziękuję Ci!print_r
zachowa wszystkie wiadomości.Aby zarejestrować ślad
Dzięki @Tobiasz
źródło
Backtrace zrzuca całe śmieci, których nie potrzebujesz. Trwa bardzo długo, trudny do odczytania. Wszystko, czego zwykle pragniesz, to „jak się nazywa, skąd?” Oto proste rozwiązanie funkcji statycznej. Zwykle umieszczam go w klasie o nazwie „debugowanie”, która zawiera wszystkie moje funkcje narzędzia do debugowania.
Nazywasz to tak:
I produkuje takie dane wyjściowe:
źródło
Dziwne, że nikt nie opublikował w ten sposób:
To faktycznie drukuje ślad bez śmieci - tylko jaka metoda została wywołana i gdzie.
źródło
Jeśli chcesz śledzenia stosu, który wygląda bardzo podobnie do tego, jak php formatuje wyjątek śledzenia stosu, niż użyj tej funkcji, napisałem:
Zwróci to ślad stosu sformatowany w następujący sposób:
źródło
$e = new Exception; echo $e->getTraceAsString();
Czy to robi co chcesz?
źródło
Zobaczyć
debug_print_backtrace
. Chyba możeszflush
później zadzwonić, jeśli chcesz.źródło
phptrace to świetne narzędzie do drukowania stosu PHP w dowolnym momencie, bez potrzeby instalowania żadnych rozszerzeń.
Istnieją dwie główne funkcje phptrace: po pierwsze, stos wywołań drukowania PHP, które nie muszą niczego instalować, po drugie, śledzenie przepływów wykonania php, które wymaga zainstalowania rozszerzenia, które dostarcza.
następująco:
źródło
Służy
debug_backtrace
do uzyskania informacji o tym, jakie funkcje i metody zostały wywołane oraz jakie pliki zostały zawarte, które doprowadziły do momentu, w którymdebug_backtrace
zostały wywołane.źródło
spójrz na tę klasę utils, może być pomocna:
Stosowanie:
Klasa źródłowa: https://github.com/augustowebd/utils/blob/master/Who.php
źródło
debug_backtrace()
źródło
Możesz zajrzeć
debug_backtrace
, a możedebug_print_backtrace
.źródło
Rozwiązanie Walltearer jest doskonałe, szczególnie jeśli jest umieszczone w tagu „pre”:
- który określa połączenia na osobnych liniach, starannie ponumerowanych
źródło
Zaadaptowałem powyższą odpowiedź Dona Briggsa, aby używać wewnętrznego rejestrowania błędów zamiast drukowania publicznego, co może stanowić poważny problem podczas pracy na serwerze na żywo. Ponadto dodano kilka dodatkowych modyfikacji, takich jak opcja włączenia pełnej ścieżki pliku zamiast podstawowej nazwy (ponieważ mogą istnieć pliki o tej samej nazwie w różnych ścieżkach), a także (dla tych, którzy tego wymagają) kompletny plik wyjściowy stosu węzłów:
źródło