Saya mencari cara untuk mencetak tumpukan panggilan di PHP.
Poin bonus jika fungsi flush buffer IO.
php
stack-trace
error-logging
Justin
sumber
sumber
Jawaban:
Jika Anda ingin membuat backtrace, Anda mencari
debug_backtrace
dan / ataudebug_print_backtrace
.Misalnya, yang pertama akan memberi Anda array seperti ini (mengutip manual) :
Mereka tampaknya tidak akan menyiram buffer I / O, tetapi Anda dapat melakukannya sendiri, dengan
flush
dan / atauob_flush
.(lihat halaman manual yang pertama untuk mengetahui mengapa "dan / atau" ;-))
sumber
DEBUG_BACKTRACE_IGNORE_ARGS
parameter opsional ; yang membuat mereka secara fungsional setara dengan(new \Exception())->getTraceAsString()
Lebih mudah dibaca daripada
debug_backtrace()
:sumber
debug_backtrace
untuk hanya mengembalikan level pertama di stacktrace - solusi ini bekerja untuk saya. Terima kasih!print_r
akan menyimpan semua pesan.Untuk mencatat jejak
Terima kasih @Tobiasz
sumber
Backtrace membuang banyak sampah yang tidak Anda butuhkan. Butuh waktu sangat lama, sulit dibaca. Yang Anda inginkan adalah "apa yang disebut dari mana?" Berikut ini adalah solusi fungsi statis sederhana. Saya biasanya meletakkannya di kelas yang disebut 'debug', yang berisi semua fungsi utilitas debugging saya.
Anda menyebutnya seperti ini:
Dan itu menghasilkan output seperti ini:
sumber
Aneh bahwa tidak ada yang diposting dengan cara ini:
Ini sebenarnya mencetak backtrace tanpa sampah - hanya metode apa yang disebut dan di mana.
sumber
Jika Anda ingin jejak stack yang terlihat sangat mirip dengan bagaimana format php jejak stack pengecualian daripada menggunakan fungsi ini saya tulis:
Ini akan mengembalikan jejak jejak yang diformat seperti ini:
sumber
$e = new Exception; echo $e->getTraceAsString();
Apakah itu melakukan apa yang Anda inginkan?
sumber
Lihat
debug_print_backtrace
. Saya kira Anda dapat meneleponflush
setelah itu jika Anda mau.sumber
phptrace adalah alat yang hebat untuk mencetak tumpukan PHP kapan saja Anda inginkan tanpa menginstal ekstensi apa pun.
Ada dua fungsi utama dari phptrace: pertama, print call stack PHP yang tidak perlu menginstal apa pun, kedua, lacak arus eksekusi php yang perlu menginstal ekstensi yang disediakannya.
sebagai berikut:
sumber
Gunakan
debug_backtrace
untuk mendapatkan backtrace dari fungsi dan metode apa yang telah dipanggil dan file apa yang dimasukkan yang mengarah ke titik di manadebug_backtrace
telah dipanggil.sumber
silakan lihat kelas utils ini, semoga bermanfaat:
Pemakaian:
Kelas sumber: https://github.com/augustowebd/utils/blob/master/Who.php
sumber
debug_backtrace()
sumber
Anda mungkin ingin melihat ke dalam
debug_backtrace
, atau mungkindebug_print_backtrace
.sumber
Solusi Walltearer sangat baik, terutama jika disertakan dalam tag 'pra':
- yang menetapkan panggilan pada saluran terpisah, bernomor rapi
sumber
Saya telah mengadaptasi jawaban Don Briggs di atas untuk menggunakan logging kesalahan internal alih-alih pencetakan publik, yang mungkin menjadi perhatian besar Anda ketika bekerja pada server langsung. Juga, menambahkan beberapa modifikasi seperti opsi untuk memasukkan path file lengkap alih-alih nama dasar (karena, mungkin ada file dengan nama yang sama di jalur yang berbeda), dan juga (bagi mereka yang membutuhkannya) output node stack lengkap:
sumber