Saya yakin ini pertanyaan yang bagus! Ketika Anda tidak tahu bagaimana cara mendekati debugging PHP, Anda bahkan tidak tahu bagaimana mengatakan pertanyaan Anda, tidak tahu bagaimana untuk lebih tepat dari ini. Jadi, itu mungkin tidak mematuhi aturan Stack, tapi itu pasti banyak membantu kita, pemula, banyak!
Mihaela
1
dari php5.4 dan seterusnya memperkenalkan debugger antarmuka baris perintah baru yang disebut phpdbg ( phpdbg.com ). PHP5.6 akan datang dengan phpdbg default.
Ganesh Patil
1
Pernah mendengar tentang XDebug? :)
Pratik
Jawaban:
145
Coba Eclipse PDT untuk menyiapkan lingkungan Eclipse yang memiliki fitur debug seperti yang Anda sebutkan. Kemampuan untuk masuk ke kode adalah cara yang jauh lebih baik untuk men-debug kemudian metode lama var_dump dan mencetak di berbagai titik untuk melihat di mana aliran Anda salah. Ketika semuanya gagal dan semua yang saya miliki adalah SSH dan vim saya masih var_dump()/ die()untuk menemukan di mana kode pergi ke selatan.
Anda harus menggunakan fungsi ini: kill ($ data) {die (var_dump ($ data)); } Ini menghemat mengetik 10 karakter, fungsi terbaik yang pernah saya tulis tbh :)
Terima kasih. Itu menyelamatkan hari saya. (Saya baru saja menghapus E_STRICT itu)
Sec
4
assert_callcackheh
Madbreaks
32
Xdebug dan plugin DBGp untuk Notepad ++ untuk tugas berat berburu bug, FirePHP untuk hal-hal ringan. Cepat dan kotor? Tidak ada yang mengalahkan dBug .
Plugin DBGp tidak berfungsi dengan versi notepad ++ / xdebug saat ini dan tidak ada rencana untuk memperbaikinya. Anda dapat melihat diskusi saya dengan pencipta yang tertaut di sini
Joe
26
XDebug sangat penting untuk pengembangan. Saya menginstalnya sebelum ekstensi lainnya. Ini memberi Anda tumpukan jejak pada kesalahan apa pun dan Anda dapat mengaktifkan profil dengan mudah.
Untuk melihat sekilas penggunaan struktur data var_dump(). Jangan gunakan print_r()karena Anda harus mengelilinginya <pre>dan hanya mencetak satu var sekaligus.
<?php var_dump(__FILE__, __LINE__, $_REQUEST);?>
Untuk lingkungan debugging nyata yang terbaik yang saya temukan adalah Komodo IDE tetapi harganya $$.
PhpEd sangat bagus. Anda dapat masuk / keluar / keluar dari fungsi. Anda dapat menjalankan kode ad-hoc, memeriksa variabel, mengubah variabel. Ini luar biasa.
Saya telah menggunakan PhpEd dan saya tidak memiliki kata-kata baik untuk itu ketika dibandingkan dengan IDE nyata seperti NetBeans atau Eclipse, juga komentar ini tidak menambahkan sesuatu yang berguna untuk pertanyaan itu. -1
siliconrockstar
Saya mencoba sebagian besar IDE (termasuk Zend, NetBeans, dan Eclipse) sebelum membeli PhpED Professional karena itu yang terbaik sejauh satu setengah mil. Ini beberapa tahun yang lalu, jadi yang lain mungkin sudah membaik, tetapi pada saat itu kebanyakan dari mereka sangat lambat karena ditulis di Jawa. Saya tidak mengerti bagaimana seseorang dapat memiliki "tidak ada kata-kata baik untuk itu" ketika (bagi saya) itu jelas yang terbaik, keputusannya adalah no-brainer.
lm713
17
1) Saya menggunakan print_r (). Di TextMate, saya memiliki cuplikan untuk 'pra' yang meluas ke ini:
echo "<pre>";
print_r();
echo "</pre>";
2) Saya menggunakan Xdebug, tetapi belum bisa menjalankan GUI di Mac saya. Setidaknya mencetak versi jejak stack yang dapat dibaca.
Saya yakin maksud Anda echo "</pre>"; pada akhirnya.
altermativ
9
Anda juga dapat melewatkan 'true' ke dalam fungsi sehingga mengembalikan string. Ini berarti Anda dapat melakukan ini:echo '<pre>', print_r($var, true), '</pre>';
DisgruntledGoat
16
Saya telah menggunakan Zend Studio (5.5) , bersama dengan Zend Platform . Itu memberi debugging yang tepat, breakpoints / melangkahi kode dll, meskipun dengan harga.
Dalam semua kejujuran, kombinasi print dan print_r () untuk mencetak variabel. Saya tahu bahwa banyak yang lebih suka menggunakan metode lain yang lebih maju, tetapi saya menemukan ini yang paling mudah digunakan.
Saya akan mengatakan bahwa saya tidak sepenuhnya menghargai ini sampai saya melakukan beberapa pemrograman Microprocessor di Uni dan bahkan tidak dapat menggunakan ini.
Saya senang Anda menyebutkan print serta print_r, saya menggunakan print dasar untuk melihat apakah kode dieksekusi ke titik tertentu, yang membantu mengisolasi masalah.
Brad
Saya menggunakan print dan var_dump (). Saya menggunakan cetak untuk menampilkan pesan dan informasi debug dan var_dump untuk menunjukkan keadaan variabel saat hal-hal berkembang.
Joshua K
14
Xdebug , karya Derick Rethans, sangat bagus. Saya menggunakannya beberapa waktu lalu dan ternyata tidak mudah menginstalnya. Setelah selesai, Anda tidak akan mengerti bagaimana Anda berhasil tanpanya :-)
Ada artikel bagus tentang Zend Developer Zone (menginstal di Linux sepertinya tidak lebih mudah) dan bahkan sebuah plugin Firefox , yang tidak pernah saya gunakan.
Bukan hanya menginstal yang membuat frustrasi. Mengkonfigurasi Xdebug agar berfungsi dengan Eclipse bisa menjadi mimpi buruk. Saya bisa menginstal Xdebug di CentOS 5 tetapi EclipsePDT + Xdebug tidak mau bekerja sama :(
Jahangir
11
Saya menggunakan Netbeans dengan XDebug. Lihatlah di situs webnya untuk mendapatkan dokumen tentang cara mengonfigurasinya.
http://php.netbeans.org/
Add-on sangat penting ketika Anda men-debug proyek MVC, karena cara XDebug berjalan normal di Netbeans adalah dengan mendaftarkan sesi dbug melalui url. Dengan add-on yang terinstal di FireFox, Anda akan mengatur properti proyek Netbeans Anda -> Run Configuratuion -> Advanced dan pilih "Do Not Open Web Browser" Anda sekarang dapat mengatur titik istirahat Anda dan memulai sesi debug dengan Ctrl-F5 seperti biasa . Buka FireFox dan klik kanan ikon Add-on di sudut kanan bawah untuk mulai memantau breakpoints. Ketika kode mencapai breakpoint itu akan berhenti dan Anda dapat memeriksa status variabel Anda dan tumpukan panggilan.
Output buffering sangat berguna jika Anda tidak ingin mengacaukan output Anda. Saya melakukan ini dalam satu baris yang dapat saya komentari / batalkan komentar sesuka hati
Untuk masalah yang benar-benar berat yang akan memakan waktu terlalu lama untuk menggunakan print_r / echo untuk mencari tahu saya menggunakan fitur debugging (PhpEd) IDE saya. Tidak seperti IDE lain yang saya gunakan, PhpEd tidak memerlukan setup. satu-satunya alasan saya tidak menggunakannya untuk masalah yang saya temui adalah sangat lambat. Saya tidak yakin bahwa kelambatan khusus untuk PhpEd atau debugger php apa pun. PhpEd tidak gratis tetapi saya percaya itu menggunakan salah satu dari debugger open-source (seperti XDebug yang disebutkan sebelumnya). Keuntungan dengan PhpEd, sekali lagi, adalah tidak memerlukan pengaturan yang saya temukan sangat membosankan di masa lalu.
Debugger PHPEd sebenarnya ditulis oleh orang yang sama yang menulis PHPEd dan saya cukup yakin itu bukan open source. Setidaknya PHPEd tidak menyertakan sumber tetapi mengkompilasi .so dan .dll.
Artem Russakovskii
4
Debugging manual umumnya lebih cepat bagi saya - var_dump()dan debug_print_backtrace()semua alat yang Anda butuhkan untuk melengkapi logika Anda.
Ya, sampai taraf tertentu itu tergantung pada ke mana arah selatan. Itu hal pertama yang saya coba untuk mengisolasi, dan kemudian saya akan menggunakan echo / print_r () sebagaimana diperlukan.
NB: Kalian tahu bahwa Anda dapat meneruskan true sebagai argumen kedua ke print_r () dan itu akan mengembalikan hasilnya alih-alih mencetaknya? Misalnya:
Saya hanya membungkusnya dalam fungsi yang disebut debug. Jadi saya bisa melakukan debug ($ var);
jdelator
3
Saya sering menggunakan CakePHP ketika Rails tidak memungkinkan. Untuk men-debug kesalahan saya biasanya menemukan error.logdi folder tmp dan mengekornya di terminal dengan perintah ...
tail -f app/tmp/logs/error.log
Ini memberi Anda menjalankan dialog dari apa yang sedang terjadi, yang sangat berguna, jika Anda ingin menampilkan sesuatu untuk itu kode tengah yang dapat Anda gunakan.
$this->log('xxxx');
Ini biasanya dapat memberi Anda ide yang baik tentang apa yang sedang terjadi / salah.
IDE Komodo bekerja dengan baik dengan xdebug, bahkan untuk debugging remore. Perlu jumlah minimum konfigurasi. Yang Anda butuhkan hanyalah versi php yang bisa digunakan Komodo secara lokal untuk menelusuri kode pada breakpoint. Jika Anda memiliki skrip yang diimpor ke proyek komodo, maka Anda dapat mengatur breakpoints dengan klik mouse persis bagaimana Anda akan mengaturnya di dalam gerhana untuk debugging program java. Remote debugging jelas lebih sulit untuk membuatnya berfungsi dengan benar (Anda mungkin harus memetakan url jarak jauh dengan skrip php di ruang kerja Anda) daripada pengaturan debugging lokal yang cukup mudah untuk dikonfigurasikan jika Anda berada di MAC atau desktop linux .
Ada banyak teknik debugging PHP yang dapat menghemat banyak waktu Anda saat coding. Teknik debugging yang efektif tetapi mendasar adalah dengan hanya mengaktifkan pelaporan kesalahan. Teknik lain yang sedikit lebih maju melibatkan penggunaan pernyataan cetak, yang dapat membantu menunjukkan bug yang lebih sulit dipahami dengan menampilkan apa yang sebenarnya terjadi di layar. PHPeclipse adalah plug-in Eclipse yang dapat menyoroti kesalahan sintaksis umum dan dapat digunakan bersama dengan debugger untuk mengatur breakpoints.
saya menggunakan zend studio untuk gerhana dengan debugger bawaan. Masih lambat dibandingkan dengan debugging dengan eclipse pdt dengan xdebug. Semoga mereka akan memperbaiki masalah-masalah itu, kecepatan telah meningkat selama rilis baru-baru ini tetapi masih melangkah lebih dari 2-3 detik. Toolbar zend firefox benar-benar memudahkan segalanya (debug halaman berikutnya, halaman saat ini, dll). Juga menyediakan profiler yang akan membandingkan kode Anda dan memberikan diagram lingkaran, waktu eksekusi, dll.
Sebagian besar bug dapat ditemukan dengan mudah hanya var_dumpdengan memasukkan beberapa variabel kunci, tetapi jelas tergantung pada jenis aplikasi yang Anda kembangkan.
Untuk algoritma yang lebih kompleks, fungsi step / breakpoint / watch sangat membantu (jika tidak perlu)
Debugger PHP Stepthrough Interaktif diimplementasikan sebagai modul SAPI yang dapat memberi Anda kendali penuh atas lingkungan tanpa memengaruhi fungsionalitas atau kinerja kode Anda. Ini bertujuan untuk menjadi platform debugging yang ringan, kuat, mudah digunakan untuk PHP 5.4+ dan dikirim keluar dari kotak dengan PHP 5.6.
Jika sistem Anda mendukung pelacakan dinamis DTrace (diinstal secara default pada OS X) dan PHP Anda dikompilasi dengan probe DTrace diaktifkan ( --enable-dtrace) yang seharusnya secara default, perintah ini dapat membantu Anda men-debug skrip PHP tanpa waktu:
Jadi, alias berikut telah ditambahkan ke file rc Anda (mis. ~/.bashrc, ~/.bash_aliases):
alias trace-php='sudo dtrace -qn "php*:::function-entry { printf(\"%Y: PHP function-entry:\t%s%s%s() in %s:%d\n\", walltimestamp, copyinstr(arg3), copyinstr(arg4), copyinstr(arg0), basename(copyinstr(arg1)), (int)arg2); }"'
Anda mungkin melacak naskah Anda dengan mudah diingat alias: trace-php.
Berikut ini skrip dtrace yang lebih canggih, cukup simpan ke dalamnya dtruss-php.d, buatlah itu dapat dieksekusi ( chmod +x dtruss-php.d) dan jalankan:
Untuk mengujinya, Anda dapat pergi ke sembarang dokumen dengan index.phpdan menjalankan server PHP builtin dengan:
php -S localhost:8080
Setelah itu Anda dapat mengakses situs di http: // localhost: 8080 / (atau memilih port apa pun yang nyaman bagi Anda). Dari sana akses beberapa halaman untuk melihat jejak jejak.
Catatan: Dtrace tersedia pada OS X secara default, di Linux Anda mungkin perlu dtrace4linux atau periksa beberapa alternatif lain .
Atau periksa pelacakan SystemTap dengan menginstal paket pengembangan SystemTap SDT (misalnya yum install systemtap-sdt-devel).
Berikut ini adalah contoh skrip ( all_probes.stp) untuk melacak semua poin inti statis probe PHP selama durasi skrip PHP yang berjalan dengan SystemTap:
+1 untuk print_r (). Gunakan itu untuk membuang konten suatu objek atau variabel. Untuk membuatnya lebih mudah dibaca, lakukan dengan tag pra sehingga Anda tidak perlu melihat sumber.
echo '<pre>';
print_r($arrayOrObject);
Juga var_dump ($ thing) - ini sangat berguna untuk melihat jenis subtitle
Tergantung pada masalah saya suka kombinasi dari error_reporting (E_ALL) dicampur dengan tes gema (untuk menemukan baris / file yang menyinggung kesalahan terjadi di initally; Anda TAHU itu tidak selalu baris / file php memberitahu Anda kan?), Pencocokan IDE brace benar?), Pencocokan IDE brace (untuk menyelesaikan masalah "Parse error: kesalahan sintaks, $ end tak terduga"), dan print_r (); keluar; dumps (programmer nyata melihat sumbernya; p).
Anda juga tidak dapat mengalahkan phpdebug (periksa sourceforge) dengan "memory_get_usage ();" dan "memory_get_peak_usage ();" untuk menemukan area masalah.
Debugger terintegrasi di mana Anda dapat menyaksikan nilai-nilai perubahan variabel saat Anda melangkah melalui kode benar-benar keren. Namun, mereka memerlukan pengaturan perangkat lunak pada server dan sejumlah konfigurasi pada klien. Keduanya membutuhkan perawatan berkala agar tetap berfungsi dengan baik.
Print_r mudah ditulis dan dijamin berfungsi dalam pengaturan apa pun.
Biasanya saya menemukan membuat fungsi log kustom yang dapat menyimpan pada file, menyimpan informasi debug, dan akhirnya mencetak ulang pada catatan kaki yang umum.
Anda juga bisa mengesampingkan kelas Pengecualian umum, sehingga jenis debugging ini semi-otomatis.
Jawaban:
Coba Eclipse PDT untuk menyiapkan lingkungan Eclipse yang memiliki fitur debug seperti yang Anda sebutkan. Kemampuan untuk masuk ke kode adalah cara yang jauh lebih baik untuk men-debug kemudian metode lama var_dump dan mencetak di berbagai titik untuk melihat di mana aliran Anda salah. Ketika semuanya gagal dan semua yang saya miliki adalah SSH dan vim saya masih
var_dump()
/die()
untuk menemukan di mana kode pergi ke selatan.sumber
kill($data) { echo "<pre>"; var_dump($data); echo "</pre>"; exit; }
Anda dapat menggunakan Firephp sebagai add-on untuk firebug untuk men-debug php di lingkungan yang sama dengan javascript.
Saya juga menggunakan Xdebug yang disebutkan sebelumnya untuk membuat profil php.
sumber
Ini adalah lingkungan debug kecil saya:
sumber
assert_callcack
hehXdebug dan plugin DBGp untuk Notepad ++ untuk tugas berat berburu bug, FirePHP untuk hal-hal ringan. Cepat dan kotor? Tidak ada yang mengalahkan dBug .
sumber
XDebug sangat penting untuk pengembangan. Saya menginstalnya sebelum ekstensi lainnya. Ini memberi Anda tumpukan jejak pada kesalahan apa pun dan Anda dapat mengaktifkan profil dengan mudah.
Untuk melihat sekilas penggunaan struktur data
var_dump()
. Jangan gunakanprint_r()
karena Anda harus mengelilinginya<pre>
dan hanya mencetak satu var sekaligus.Untuk lingkungan debugging nyata yang terbaik yang saya temukan adalah Komodo IDE tetapi harganya $$.
sumber
PhpEd sangat bagus. Anda dapat masuk / keluar / keluar dari fungsi. Anda dapat menjalankan kode ad-hoc, memeriksa variabel, mengubah variabel. Ini luar biasa.
sumber
1) Saya menggunakan print_r (). Di TextMate, saya memiliki cuplikan untuk 'pra' yang meluas ke ini:
2) Saya menggunakan Xdebug, tetapi belum bisa menjalankan GUI di Mac saya. Setidaknya mencetak versi jejak stack yang dapat dibaca.
sumber
echo '<pre>', print_r($var, true), '</pre>';
Saya telah menggunakan Zend Studio (5.5) , bersama dengan Zend Platform . Itu memberi debugging yang tepat, breakpoints / melangkahi kode dll, meskipun dengan harga.
sumber
Dalam semua kejujuran, kombinasi print dan print_r () untuk mencetak variabel. Saya tahu bahwa banyak yang lebih suka menggunakan metode lain yang lebih maju, tetapi saya menemukan ini yang paling mudah digunakan.
Saya akan mengatakan bahwa saya tidak sepenuhnya menghargai ini sampai saya melakukan beberapa pemrograman Microprocessor di Uni dan bahkan tidak dapat menggunakan ini.
sumber
Xdebug , karya Derick Rethans, sangat bagus. Saya menggunakannya beberapa waktu lalu dan ternyata tidak mudah menginstalnya. Setelah selesai, Anda tidak akan mengerti bagaimana Anda berhasil tanpanya :-)
Ada artikel bagus tentang Zend Developer Zone (menginstal di Linux sepertinya tidak lebih mudah) dan bahkan sebuah plugin Firefox , yang tidak pernah saya gunakan.
sumber
Saya menggunakan Netbeans dengan XDebug. Lihatlah di situs webnya untuk mendapatkan dokumen tentang cara mengonfigurasinya. http://php.netbeans.org/
sumber
Saya menggunakan Netbeans dengan XDebug dan Easy XDebug FireFox Add-on
Add-on sangat penting ketika Anda men-debug proyek MVC, karena cara XDebug berjalan normal di Netbeans adalah dengan mendaftarkan sesi dbug melalui url. Dengan add-on yang terinstal di FireFox, Anda akan mengatur properti proyek Netbeans Anda -> Run Configuratuion -> Advanced dan pilih "Do Not Open Web Browser" Anda sekarang dapat mengatur titik istirahat Anda dan memulai sesi debug dengan Ctrl-F5 seperti biasa . Buka FireFox dan klik kanan ikon Add-on di sudut kanan bawah untuk mulai memantau breakpoints. Ketika kode mencapai breakpoint itu akan berhenti dan Anda dapat memeriksa status variabel Anda dan tumpukan panggilan.
sumber
Output buffering sangat berguna jika Anda tidak ingin mengacaukan output Anda. Saya melakukan ini dalam satu baris yang dapat saya komentari / batalkan komentar sesuka hati
sumber
PhpEdit memiliki debugger bawaan, tetapi saya biasanya menggunakan echo (); dan print_r (); cara kuno !!
sumber
Untuk masalah yang benar-benar berat yang akan memakan waktu terlalu lama untuk menggunakan print_r / echo untuk mencari tahu saya menggunakan fitur debugging (PhpEd) IDE saya. Tidak seperti IDE lain yang saya gunakan, PhpEd tidak memerlukan setup. satu-satunya alasan saya tidak menggunakannya untuk masalah yang saya temui adalah sangat lambat. Saya tidak yakin bahwa kelambatan khusus untuk PhpEd atau debugger php apa pun. PhpEd tidak gratis tetapi saya percaya itu menggunakan salah satu dari debugger open-source (seperti XDebug yang disebutkan sebelumnya). Keuntungan dengan PhpEd, sekali lagi, adalah tidak memerlukan pengaturan yang saya temukan sangat membosankan di masa lalu.
sumber
Debugging manual umumnya lebih cepat bagi saya -
var_dump()
dandebug_print_backtrace()
semua alat yang Anda butuhkan untuk melengkapi logika Anda.sumber
Ya, sampai taraf tertentu itu tergantung pada ke mana arah selatan. Itu hal pertama yang saya coba untuk mengisolasi, dan kemudian saya akan menggunakan echo / print_r () sebagaimana diperlukan.
NB: Kalian tahu bahwa Anda dapat meneruskan true sebagai argumen kedua ke print_r () dan itu akan mengembalikan hasilnya alih-alih mencetaknya? Misalnya:
sumber
Saya sering menggunakan CakePHP ketika Rails tidak memungkinkan. Untuk men-debug kesalahan saya biasanya menemukan
error.log
di folder tmp dan mengekornya di terminal dengan perintah ...Ini memberi Anda menjalankan dialog dari apa yang sedang terjadi, yang sangat berguna, jika Anda ingin menampilkan sesuatu untuk itu kode tengah yang dapat Anda gunakan.
Ini biasanya dapat memberi Anda ide yang baik tentang apa yang sedang terjadi / salah.
sumber
print_r (debug_backtrace ());
atau semacam itu :-)
sumber
IDE Komodo bekerja dengan baik dengan xdebug, bahkan untuk debugging remore. Perlu jumlah minimum konfigurasi. Yang Anda butuhkan hanyalah versi php yang bisa digunakan Komodo secara lokal untuk menelusuri kode pada breakpoint. Jika Anda memiliki skrip yang diimpor ke proyek komodo, maka Anda dapat mengatur breakpoints dengan klik mouse persis bagaimana Anda akan mengaturnya di dalam gerhana untuk debugging program java. Remote debugging jelas lebih sulit untuk membuatnya berfungsi dengan benar (Anda mungkin harus memetakan url jarak jauh dengan skrip php di ruang kerja Anda) daripada pengaturan debugging lokal yang cukup mudah untuk dikonfigurasikan jika Anda berada di MAC atau desktop linux .
sumber
Nusphere juga merupakan debugger yang bagus untuk php nusphere
sumber
Ada banyak teknik debugging PHP yang dapat menghemat banyak waktu Anda saat coding. Teknik debugging yang efektif tetapi mendasar adalah dengan hanya mengaktifkan pelaporan kesalahan. Teknik lain yang sedikit lebih maju melibatkan penggunaan pernyataan cetak, yang dapat membantu menunjukkan bug yang lebih sulit dipahami dengan menampilkan apa yang sebenarnya terjadi di layar. PHPeclipse adalah plug-in Eclipse yang dapat menyoroti kesalahan sintaksis umum dan dapat digunakan bersama dengan debugger untuk mengatur breakpoints.
dan juga digunakan
sumber
Dalam lingkungan produksi, saya mencatat data yang relevan ke log kesalahan server dengan error_log ().
sumber
saya menggunakan zend studio untuk gerhana dengan debugger bawaan. Masih lambat dibandingkan dengan debugging dengan eclipse pdt dengan xdebug. Semoga mereka akan memperbaiki masalah-masalah itu, kecepatan telah meningkat selama rilis baru-baru ini tetapi masih melangkah lebih dari 2-3 detik. Toolbar zend firefox benar-benar memudahkan segalanya (debug halaman berikutnya, halaman saat ini, dll). Juga menyediakan profiler yang akan membandingkan kode Anda dan memberikan diagram lingkaran, waktu eksekusi, dll.
sumber
Sebagian besar bug dapat ditemukan dengan mudah hanya
var_dump
dengan memasukkan beberapa variabel kunci, tetapi jelas tergantung pada jenis aplikasi yang Anda kembangkan.Untuk algoritma yang lebih kompleks, fungsi step / breakpoint / watch sangat membantu (jika tidak perlu)
sumber
PHP DBG
Debugger PHP Stepthrough Interaktif diimplementasikan sebagai modul SAPI yang dapat memberi Anda kendali penuh atas lingkungan tanpa memengaruhi fungsionalitas atau kinerja kode Anda. Ini bertujuan untuk menjadi platform debugging yang ringan, kuat, mudah digunakan untuk PHP 5.4+ dan dikirim keluar dari kotak dengan PHP 5.6.
Fitur termasuk:
Lihat tangkapan layar:
Halaman depan: http://phpdbg.com/
Kesalahan PHP - Pelaporan kesalahan yang lebih baik untuk PHP
Ini sangat mudah digunakan perpustakaan (sebenarnya file) untuk men-debug skrip PHP Anda.
Satu-satunya hal yang perlu Anda lakukan adalah memasukkan satu file seperti di bawah ini (di awal kode Anda):
Maka semua kesalahan akan memberi Anda info seperti backtrace, konteks kode, argumen fungsi, variabel server, dll. Misalnya:
Fitur termasuk:
Halaman depan: http://phperror.net/
GitHub: https://github.com/JosephLenton/PHP-Error
Garpu saya (dengan perbaikan tambahan): https://github.com/kenorb-contrib/PHP-Error
DTrace
Jika sistem Anda mendukung pelacakan dinamis DTrace (diinstal secara default pada OS X) dan PHP Anda dikompilasi dengan probe DTrace diaktifkan (
--enable-dtrace
) yang seharusnya secara default, perintah ini dapat membantu Anda men-debug skrip PHP tanpa waktu:Jadi, alias berikut telah ditambahkan ke file rc Anda (mis.
~/.bashrc
,~/.bash_aliases
):Anda mungkin melacak naskah Anda dengan mudah diingat alias:
trace-php
.Berikut ini skrip dtrace yang lebih canggih, cukup simpan ke dalamnya
dtruss-php.d
, buatlah itu dapat dieksekusi (chmod +x dtruss-php.d
) dan jalankan:Home page: lampu dtruss di GitHub
Ini adalah penggunaan sederhana:
sudo dtruss-php.d
.php -r "phpinfo();"
.Untuk mengujinya, Anda dapat pergi ke sembarang dokumen dengan
index.php
dan menjalankan server PHP builtin dengan:Setelah itu Anda dapat mengakses situs di http: // localhost: 8080 / (atau memilih port apa pun yang nyaman bagi Anda). Dari sana akses beberapa halaman untuk melihat jejak jejak.
Catatan: Dtrace tersedia pada OS X secara default, di Linux Anda mungkin perlu dtrace4linux atau periksa beberapa alternatif lain .
Lihat: Menggunakan PHP dan DTrace di php.net
SystemTap
Atau periksa pelacakan SystemTap dengan menginstal paket pengembangan SystemTap SDT (misalnya
yum install systemtap-sdt-devel
).Berikut ini adalah contoh skrip (
all_probes.stp
) untuk melacak semua poin inti statis probe PHP selama durasi skrip PHP yang berjalan dengan SystemTap:Pemakaian:
Lihat: Menggunakan SystemTap dengan Probe Statis PHP DTrace di php.net
sumber
+1 untuk print_r (). Gunakan itu untuk membuang konten suatu objek atau variabel. Untuk membuatnya lebih mudah dibaca, lakukan dengan tag pra sehingga Anda tidak perlu melihat sumber.
Juga var_dump ($ thing) - ini sangat berguna untuk melihat jenis subtitle
sumber
Tergantung pada masalah saya suka kombinasi dari error_reporting (E_ALL) dicampur dengan tes gema (untuk menemukan baris / file yang menyinggung kesalahan terjadi di initally; Anda TAHU itu tidak selalu baris / file php memberitahu Anda kan?), Pencocokan IDE brace benar?), Pencocokan IDE brace (untuk menyelesaikan masalah "Parse error: kesalahan sintaks, $ end tak terduga"), dan print_r (); keluar; dumps (programmer nyata melihat sumbernya; p).
Anda juga tidak dapat mengalahkan phpdebug (periksa sourceforge) dengan "memory_get_usage ();" dan "memory_get_peak_usage ();" untuk menemukan area masalah.
sumber
Debugger terintegrasi di mana Anda dapat menyaksikan nilai-nilai perubahan variabel saat Anda melangkah melalui kode benar-benar keren. Namun, mereka memerlukan pengaturan perangkat lunak pada server dan sejumlah konfigurasi pada klien. Keduanya membutuhkan perawatan berkala agar tetap berfungsi dengan baik.
Print_r mudah ditulis dan dijamin berfungsi dalam pengaturan apa pun.
sumber
Biasanya saya menemukan membuat fungsi log kustom yang dapat menyimpan pada file, menyimpan informasi debug, dan akhirnya mencetak ulang pada catatan kaki yang umum.
Anda juga bisa mengesampingkan kelas Pengecualian umum, sehingga jenis debugging ini semi-otomatis.
sumber