PHP Debugging - Cara Debug Kode PHP Anda (termasuk teknik debugging Drupal!)
Diterbitkan: 2019-09-03Debugging bukanlah sesuatu yang kami nantikan oleh para pengembang. Pengembang membenci bug tetapi untuk dapat membangun perangkat lunak berkualitas baik, debugging adalah bagian tak terpisahkan dari kehidupan pengembang. Setiap pengembang PHP memiliki gaya dan metode masuk yang berbeda untuk men-debug kode mereka. Ini tergantung pada pengalaman mereka, pendekatan pemecahan masalah mereka dan yang paling penting - jumlah waktu yang mereka miliki!
Seberapa penting debugging dan mengapa Anda perlu men-debug kode Anda?
Debugging adalah bagian integral dari siklus hidup pengembangan perangkat lunak yang menjamin hasil yang berkualitas.
Bayangkan ini - Basis kodenya besar, Anda baru mengenal proyek ini, Anda tidak memiliki banyak detail proyek/fungsionalitas. Tapi Anda seharusnya memperbaiki bug. Dari mana kita memulai? Kami mulai dengan menganalisis kode langkah demi langkah untuk memahami apa yang dilakukan dan di mana kesalahannya. Itu, teman-teman, adalah Debugging. Debugging adalah seni yang bisa menjadi lebih baik dengan latihan dan pengalaman.
Cara men-debug kode PHP Anda
Oke jadi inilah kasus yang saya temui dalam karir pengembangan saya. Ada situs perdagangan yang dibangun di Wordpress di mana proses checkout memakan waktu sekitar 5-8 menit dan saya diminta untuk menyelesaikannya. Dalam hal ini, saya tidak memiliki banyak pengetahuan tentang cara kerja berbagai hal dengan Wordpress. Jadi saya mulai dengan memeriksa opsi dari daftar satu per satu seperti, (a) Apakah karena beberapa plugin? (b) Apakah ini terkait dengan Tema? (c) Apakah ada basis kode khusus? dll.
Alat yang membantu saya dalam debugging php dan menyelesaikan kasus ini adalah Blackfire. Ini memberi Anda opsi yang lebih mudah dibaca pengguna dari jejak tumpukan semua fungsi, waktu yang dibutuhkan untuk setiap fungsi dalam keseluruhan proses. Dengan menggunakan ini, saya menemukan fungsi yang memakan proses checkout. Yang Anda butuhkan hanyalah beberapa pengaturan untuk menambahkan kunci ke basis kode Anda dan Anda siap untuk menganalisis fungsionalitas apa pun menggunakan dokumentasi.
Jadi, Anda dapat mengatasi bug jika Anda memiliki pengetahuan tentang beberapa metode debugging php.
Teknik Debug Kode
Biarkan saya berbicara tentang beberapa teknik yang telah saya gunakan untuk debugging PHP.
Cara sederhana dan paling umum untuk memeriksa apakah fungsi atau metode yang Anda tulis sedang dipanggil, tulis exit. Tidak akan ada pengembang yang tidak menggunakan ini!
Untuk memeriksa nilai beberapa variabel, print_r(), var_dump(), var_export(). Oke, mari kita lihat perbedaannya.
Contoh:
Asumsikan sebuah array $a = array( 1, array( "a", "b") ); print_r($a);
Himpunan ( [ 0 ] => 1 [ 1 ] => Array ( [ 0 ] => 'a' [ 1 ] => 'b' ) ) |
Ini memberikan format yang dapat dibaca manusia dan informasi tentang variabel. Juga, kita dapat menyimpannya ke variabel dengan print_r($var, true).
var_dump( $a );
larik ( 3 ) { [ 0 ]=> int( 1 ) [ 1 ]=> larik ( 2 ) { [ 0 ]=> string( 1 ) "a" [ 1 ]=> string( 1 ) "b" } } |
Ini mencetak bersama dengan jenis, panjang setiap nilai. Dan ini lebih cepat dibandingkan dengan print_r()
var_ekspor( $a );
susunan ( 0 => 1 , 1 => susunan ( 0 => 'a' , 1 => 'b' , ), ) |
Ini mencetak bersama dengan jenis, panjang setiap nilai. Dan ini lebih cepat dibandingkan dengan print_r()
var_ekspor( $a );
Ini mengembalikan php yang valid, jika ada variabel, jika tidak mengembalikan false. Artinya, output dari var_export dapat langsung digunakan dalam file php.
Pernahkah Anda menggunakan debug($var, NULL, TRUE) yang disediakan oleh Drupal core? Ini menggunakan print_r() atau var_export berdasarkan argumen yang diteruskan ke fungsi debug php.
Bagaimana dengan peringatan seperti di bawah ini, yang Anda tidak tahu baris kode mana yang menyebabkan peringatan seperti itu.
peringatan: Argumen tidak valid diberikan untuk foreach() di /modules/node/node.module pada baris 485 .
Kita tahu bahwa ada begitu banyak tempat dimana modul node akan dipanggil. Jadi, bagaimana Anda menyelesaikan ini? Salah satu cara yang lebih cepat tanpa menggunakan sumber daya eksternal lainnya adalah menggunakan fungsi PHP debug_backtrace() . Pergi ke "drupal_set_message", karena Anda tahu, ini adalah metode yang mencetak peringatan. Letakkan baris di bawah ini, dalam fungsi itu
debug_backtrace();
Keluaran:
Himpunan ![]() argumen disediakan untuk foreach() di /modules/node/node.module pada baris 504. |
Fungsi ini menunjukkan tumpukan semua fungsi yang dipanggil dalam proses menyebabkan peringatan. Pastikan Anda membatasi batasnya, jika tidak, PHP akan menampilkan pesan "memori habis" jika tumpukan terlalu lama untuk ditampilkan.
Men-debug melalui CLI:
Pernah dengar tentang phpdbg ! Ya, ada ekstensi php yang tersedia dari PHP 5.6+ yang digunakan untuk men-debug file php dari baris perintah.
Buka terminal Anda, masukkan "phpdbg". Ini memulai shell debugger php interaktif. Anda juga dapat menggunakan breakpoint! Coba saja - cara tersembunyi untuk men-debug PHP.
Satu-satunya masalah adalah: Anda harus terbiasa dengan perintah phpdbg untuk memanfaatkannya dengan lebih baik.
Debug melalui Drupal:
Devel Kint: Pengembang Drupal cukup sering menggunakan ini. Kint adalah submodul dari modul Devel yang dapat digunakan untuk men-debug template twig Drupal 8 bersama-sama dengan dump();
DB Log: Siapa yang tidak tahu modul Drupal ini?! Di D7 itu adalah pengawas () dan D8 itu adalah layanan logger.
\Drupal::logger( 'my_module' )->debug($message);
Tetapi satu-satunya alasan mengapa kami tidak menganjurkan penggunaan modul ini meskipun kami menyukainya adalah bahwa pesan log ditulis ke dalam database setiap saat!
Dan bayangkan jika itu adalah database yang besar, ini akan menjadi lebih buruk dan akan mempengaruhi kinerja. Itulah alasannya, tidak disarankan untuk menggunakan modul DBLOG di situs Produksi.
Apakah Anda masih ingin menggunakan DBLog, modul dan mengurangi dampak kinerja? Ada solusi untuk itu juga - Filter DBlog. Ini adalah modul kontribusi yang membantu membatasi jenis log yang akan ditulis ke dalam database. Misalnya, jika Anda hanya ingin menyimpan log "kesalahan" tingkat keparahan, Anda dapat mengonfigurasinya dengan modul ini. Jadi Anda tidak perlu menghapus modul Dblog sepenuhnya . Oh ya, dan modul ini disumbangkan oleh saya ;)
profiler web
Profiler web adalah modul kontribusi yang disediakan oleh Devel lagi. Setelah modul diaktifkan, Anda akan melihat laporan di bagian bawah jendela. Setiap kali halaman dimuat, laporan ini memberi kita waktu buka halaman, jumlah kueri yang berjalan di halaman, jumlah formulir, jumlah file js/css, dll. di halaman itu.

Ya, Ini bahkan menawarkan detail setiap bagian dengan mengkliknya. Misalnya, gambar berikut menunjukkan kueri di halaman beranda.

XDebug - Men-debug melalui IDE:
Cara debug terbaik dan lebih ramah pengguna yang disukai sebagian besar orang jika mereka menggunakan IDE untuk pengkodean adalah menggunakan XDebug. XDebug adalah ekstensi PHP yang membantu dalam pengembangan dan debugging dan menyediakan debugger satu langkah yang dapat Anda gunakan dengan IDE seperti PHPStorm. Tentu saja untuk mendapatkan hasil terbaik, Anda harus berusaha lebih keras untuk menginstal dan mengkonfigurasi ekstensi dengan IDE yang Anda gunakan.

