Men-debug kode php di chrome

Jika Anda menggunakan PHP atau menemukan diri Anda "mengadopsi" aplikasi PHP (seperti yang saya lakukan beberapa tahun yang lalu), Anda harus tahu cara men-debug PHP

Dalam panduan mendetail untuk proses debug PHP ini, Anda akan melihat beberapa teknik proses debug yang berlaku untuk hampir semua bahasa pemrograman. Tapi jangan khawatir. Saya akan membahas secara spesifik yang berlaku untuk PHP, dari dasar hingga teknik debugging yang terintegrasi penuh. Mari kita mulai dengan teknik dasar dalam debugging PHP. nilai output dan logging

Tip. Temukan kesalahan aplikasi dan masalah kinerja secara instan dengan Stackify Retrace

Pemecahan masalah dan pengoptimalan kode Anda mudah dilakukan dengan kesalahan terintegrasi, log, dan wawasan kinerja tingkat kode

Men-debug kode php di chrome
Men-debug kode php di chrome

Mengeluarkan nilai

Saat Anda membutuhkan cara sederhana untuk men-debug program dan Anda tidak memiliki pilihan lain, Anda biasanya dapat menampilkan nilai. Terkadang ini berarti melakukan var_dump atau mencatat seluruh rangkaian acara

Ini berguna untuk memiliki debug logging di program Anda. Di PHP, Anda dapat menggunakan berbagai penebang untuk mencatat pesan debug. Saat program dijalankan dalam mode debug atau level log disetel ke debug, pesan ini akan berakhir di file stdout, stderr, atau log Anda. Log akan terisi cukup cepat dalam "mode debug", jadi Anda hanya ingin mengaktifkannya untuk sementara. Tapi saya terlalu terburu-buru di sini. Izinkan saya mencadangkan ke beberapa cara sederhana untuk menampilkan nilai

Membuang variabel ke stdout

Fungsi var_dump adalah salah satu cara untuk melihat apa yang terjadi di program PHP Anda. Itu akan membuang nilai variabel ke stdout. Ada fungsi lain yang dapat Anda gunakan untuk men-debug melalui keluaran. Berikut adalah beberapa dan bagaimana mereka akan membantu Anda

  • var_dump ($var) membuang jenis dan nilai variabel ke stdout
  • print_r ($var) mencetak nilai variabel dalam bentuk yang dapat dibaca manusia ke stdout
  • get_defined_vars() mendapatkan semua variabel yang ditentukan termasuk variabel bawaan dan variabel khusus (print_r untuk melihatnya)
  • debug_zval_dump ($var) membuang variabel dengan jumlah referensinya. Ini berguna ketika ada banyak jalur untuk memperbarui satu referensi
  • debug_print_backtrace() mencetak backtrace yang menunjukkan rantai panggilan fungsi saat ini
  • debug_backtrace() mendapatkan backtrace. Anda dapat print_r, mencatatnya ke file, atau mengirimkannya ke titik akhir logging secara asinkron

Berikut contoh kode yang menjalankan masing-masing fungsi debugging yang berguna ini

<?php
$myVar = "hello world!";

var_dump($myVar);
print_r($myVar);

$allVars = get_defined_vars();
print_r($allVars);
debug_zval_dump($allVars);

function sayHello($hello) {
    echo $hello;
    debug_print_backtrace();
}

sayHello($myVar);
?>

Fungsi-fungsi ini adalah cara cepat untuk men-debug kode PHP Anda. Anda bisa melihat mereka beraksi di Paiza ini. Setiap fungsi memiliki tujuan dan dapat berguna untuk debugging

Mengalihkan tingkat pelaporan kesalahan

PHP memiliki beberapa cara untuk mengonfigurasi pelaporan kesalahan. Anda dapat menggunakan php. ini, jika Anda memiliki akses ke sana. Jika tidak, Anda dapat menggunakan konfigurasi htaccess. Jika Anda tidak dapat menggunakan file konfigurasi, Anda memiliki opsi untuk mengubah nilainya melalui skrip. Ini mungkin, tetapi pikirkan tentang bagaimana Anda akan mengubah mode setelah men-deploy aplikasi Anda

Kombinasi pengaturan akan memberi Anda tingkat pencatatan kesalahan yang tepat. Anda akan ingin mempertimbangkan pengaturan berikut

  • error_reporting menyetel tingkat logging. E_NOTICE berguna selama pengembangan karena akan memberi tahu Anda tentang cacat seperti variabel yang tidak ditetapkan
  • display_errors memberi tahu PHP jika dan di mana harus menampilkan pesan kesalahan
  • display_startup_errors hanya boleh digunakan saat debugging
  • log_errors dan error_log bekerja sama untuk mengirim kesalahan ke file log. Lakukan ini dalam produksi daripada menampilkannya ke pengguna akhir

Merinci pengaturan ini secara lebih rinci dan memberikan lebih banyak informasi yang dapat saya muat di bagian ini. Tetapi bahkan dengan pengaturan logging terbaik, Anda masih perlu memantau kesalahan

Memantau log kesalahan

Mencatat kesalahan adalah satu hal—itu hampir pasti. Ini adalah hal lain untuk mengambil tindakan ketika kesalahan dicatat. Pertama, Anda harus mengetahui tentang error tersebut. Kecuali jika Anda memiliki siang dan malam untuk mengarahkan kursor ke log, Anda tidak akan tahu kapan sesuatu yang buruk terjadi

Hal terbaik yang dapat Anda lakukan adalah mengirimkan log PHP Anda ke layanan yang akan menangani beberapa hal penting untuk Anda

  1. Agregasi log. Anda ingin melihat semua log Anda di satu tempat. Jika Anda dapat memusatkan log dan metrik di seluruh instans, itu lebih baik. Anda akan dapat menemukan masalah di mana pun itu terjadi

Men-debug kode php di chrome

  1. Memperingatkan. Tidak ada yang lebih baik dari otomatisasi. Jika Anda seorang programmer, Anda tahu apa yang saya maksud. Anda ingin mengotomatiskan hampir semua hal jika Anda bisa. Lansiran adalah cara untuk mengirim lansiran secara otomatis ke email grup (lebih baik daripada perorangan untuk kesinambungan) ketika ada masalah. Ini bisa menjadi masalah server atau kesalahan pada log Anda. Ini harus dapat dikonfigurasi dan Anda harus memiliki kontrol atas konfigurasi tersebut
  2. Jejak di log Anda. Apa itu jejak? . Ini juga merupakan cara untuk melacak kinerja, yang seringkali merupakan tanda atau penyebab bug
  3. Deduplikasi entri log. Ketika bug menyebabkan kesalahan, itu dapat mengisi log dengan cukup cepat. Hanya menyisir log dengan ratusan atau ribuan entri yang sama adalah sebuah penghenti. Deduplikasi menghilangkan rasa sakit

Anda dapat mengonfigurasi banyak utilitas logging PHP untuk bekerja dengan Stackify Retrace dengan mengikuti panduan ini. Retrace bekerja dengan PHP, dan melakukan semua hal ini untuk Anda. Plus, itu secara otomatis mengumpulkan jejak ringan — dan hanya pada saat yang seharusnya

Tentu, Lacak Ulang adalah alat yang hebat untuk mendeteksi bug. Tapi begitu Anda mendeteksinya, perbaiki. Seringkali itu berarti memasang debugger. Mari kita bahas selanjutnya

Melangkah melalui kode

Sekarang kita akan berbicara tentang debugging dengan menelusuri kode. Inilah yang dipikirkan oleh banyak dari kita para pengembang ketika kita melihat “debugging. ” Ini adalah cara umum untuk men-debug kode (menghapus cacat yang menyebabkan kesalahan). Dengan aplikasi web atau situs web, proses debug sering kali terdiri dari dua cabang

Setelah diberi tahu tentang kesalahan yang dicatat, kami dapat melakukan debug jika diperlukan. Dengan detail yang cukup di log, ini seharusnya mudah. Kami bahkan mungkin tidak perlu menggunakan debugger. Seringkali, semakin sedikit yang digunakan, semakin baik. Tetapi jika Anda melakukannya, inilah cara mengatasinya

Alat debug PHP

Anda dapat men-debug PHP menggunakan salah satu dari banyak alat debug untuk melampirkan klien debugger. PhpStorm berfungsi dengan utilitas debug seperti Xdebug dan ZendDebugger

Menjadi poliglot, saya memerlukan IDE yang mendukung banyak bahasa, jadi saya memilih VS Code belakangan ini. Saya telah menggunakan Xdebug dengan Visual Studio di masa lalu, jadi mari kita lihat bagaimana kita dapat mengaturnya dengan VS Code

Penyiapan server debug sama, tetapi setiap klien (IDE atau CLI) akan memiliki penyiapan yang sedikit berbeda. Lihat, server debug (ekstensi Zend) membuka port, dan klien berkomunikasi dengan server melalui port tersebut. Ini hanya masalah konfigurasi dan pemasangan komponen yang tepat

Inilah langkah-langkah yang saya ambil dalam perjalanan ini

  1. Periksa ekstensi PHP di VS Code. Ada banyak. Bagian atas daftar terlihat seperti ini
    Men-debug kode php di chrome
    Dan jika Anda melewatkannya, PHP IntelliSense berada di atas dengan lebih dari enam juta unduhan, diikuti oleh PHP Debug, dengan lebih dari tiga juta unduhan.
  2. Instal ekstensi PHP Debug
  3. Klik "muat ulang" untuk memuat ulang Kode VS
  4. Instal Xdebug. Ekstensi PHP Debug untuk VS Code hanyalah integrasi ke Xdebug. Saya memiliki PHP7. 0 diinstal, jadi saya harus mendapatkan versi Xdebug yang tepat dari halaman unduhan. Skrip berikut akan membantu
<?php
phpinfo();
?>
_

Saya mencari versi PHP, versi kompiler, arsitektur, dan Pembuatan Ekstensi PHP sehingga saya dapat mengunduh versi yang benar. Saya memiliki x86, VC14, NTS (Non-thread-safe). Versi ini hadir dengan WordPress untuk IIS. Saya sedang mengerjakan mesin Windows. Jika Anda menggunakan Linux, Anda tidak akan menghadapi masalah yang sama… cukup kompilasi kode sumber untuk Xdebug

  1. Sekarang saya memiliki versi yang tepat, saya akan meletakkannya di direktori PHP/ext
  2. Selanjutnya, saya perlu mengonfigurasi PHP untuk menggunakan ekstensi dan mengizinkan debugging jarak jauh. Saya akan menambahkan konfigurasi berikut ke php. ini yang terdaftar di Info PHP
; set the extension path
zend_extension="C:/Program Files (x86)/PHP/v7.0/ext/php_xdebug-2.6.1-7.0-vc14-nts.dll"
; allow remote debugging
[XDebug]
xdebug.remote_enable = 1
xdebug.remote_autostart = 1

Ini akan menyiapkan server PHP untuk menggunakan XDebug. Langkah-langkah di sini sama apa pun IDE yang Anda gunakan. Xdebug membuka port HTTP sehingga debugger Anda dapat dilampirkan. Klien masih perlu dikonfigurasi untuk melampirkan dan menggunakan protokol debugging. Saya akan menjalankan bagian itu sekarang

  1. Terakhir, saya akan mengonfigurasi VS Code untuk terhubung ke Xdebug. Ada beberapa langkah sederhana dan kemudian melampirkan otomatis. Saya akan memecah ini menjadi bagiannya sendiri karena ada beberapa langkah

Mengonfigurasi IDE Anda

Setelah memasang Xdebug, Anda masih perlu mengonfigurasi IDE untuk dipasang ke debugger. Dalam VS Code, ini berarti menambahkan konfigurasi debug. Untungnya, ini otomatis pada saat ini. Itu hanya beberapa langkah sederhana

  1. Beralih ke tampilan debug
  2. Klik roda gigi untuk memunculkan menu bahasa
    Men-debug kode php di chrome
  3. Pilih PHP. VS Code akan menghasilkan konfigurasi default
    Men-debug kode php di chrome
  4. Muat ulang server PHP. Saya telah memasang ekstensi lain yang disebut "Server PHP" yang membuatnya sederhana. Gunakan menu konteks (klik kanan) untuk mengontrol server PHP seperti yang ditunjukkan pada gambar di bawah
    Men-debug kode php di chrome

Ini akan menempatkan IDE kita dalam keadaan siap untuk dilampirkan ke Xdebug. Komunikasi dengan debugger terjadi melalui port TCP di server debug. Xdebug menggunakan protokol DBGp melalui port 9000 secara default

Sekarang kita sudah dikonfigurasi, mari kita lihat mekanisme sesi debug. Selanjutnya, kita akan membahas cara masuk ke sesi debug, cara menyetel breakpoint, dan cara menelusuri, masuk, dan melewati fungsi. Itu bagian terbaiknya

Melampirkan dan melangkah ke debugging

Dan sekarang, saat yang Anda tunggu-tunggu. debug bertahap. Kami telah mengonfigurasi lingkungan kami untuk debugging. Kami telah memasang ekstensi debug (khususnya Xdebug), dan kami telah mengonfigurasi IDE kami (Kode VS, dalam kasus saya). Sekarang saatnya melampirkan ke debugger

Memasang debugger

Ekstensi PHP Debug untuk VS Code menghasilkan peluncuran. file json. File itu masuk ke a. direktori vscode di root proyek. Inilah yang dihasilkannya

{
    // Use IntelliSense to learn about possible attributes.
    // Hover to view descriptions of existing attributes.
    // For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387

    "version": "0.2.0",
    "configurations": [
        {
            "name": "Listen for XDebug",
            "type": "php",
            "request": "launch",
            "port": 9000
        },
        {
            "name": "Launch currently open script",
            "type": "php",
            "request": "launch",
            "program": "${file}",
            "cwd": "${fileDirname}",
            "port": 9000
        }
    ]
}

Itu menambahkan dua konfigurasi peluncuran. Itu tersedia dalam tampilan debug. Kami dapat melampirkan ke server yang sedang berjalan atau meluncurkan yang baru dengan skrip saat ini. Karena saya sudah menjalankan phpinfo, saya akan mulai dari sana dengan memilih Listen for XDebug untuk dilampirkan ke server itu

Setelah terpasang, Anda akan melihat toolbar debug

Men-debug kode php di chrome

Sebagian besar debugger memiliki mekanisme kontrol yang serupa. Ini memungkinkan Anda untuk memulai, menghentikan, melangkah, dan memulai ulang debugger Anda. Karena kami melihat ikon berhenti dan jeda, kami terpasang dan siap, jadi mari melangkah

Melangkah melalui kode

Melangkah melalui kode adalah seni sekaligus sains. Hal pertama yang perlu Anda lakukan adalah mengatur breakpoint di mana Anda merasa memiliki masalah. Saya biasanya akan memasukkan satu sebelum sehingga saya bisa melihat apa yang terjadi saat kita masuk ke kode masalah. Mari atur satu di skrip phpinfo hanya untuk membuat semuanya berjalan

Mengatur breakpoint

Biasanya, mengklik margin kiri akan menetapkan breakpoint pada baris terdekat. Anda juga dapat mengatur kursor pada garis dan menekan F9. Jika Anda memiliki beberapa panggilan fungsi di jalur yang sama, itu adalah cara untuk memastikan breakpoint berada di jalur yang benar. Titik merah akan muncul di margin kiri. Ini menunjukkan titik henti. Itu juga harus dicantumkan dalam komponen "breakpoints". Ini gambar untuk memperjelas

Men-debug kode php di chrome

Catatan. kami masih dalam tampilan Debug. Saya menetapkan satu breakpoint. Sekarang, saat saya mengeklik kanan lingkaran breakpoint merah di margin di samping kode, Anda dapat memilih Edit breakpoint… untuk menyiapkan ketentuan jika perlu. Ketentuan berguna, terutama jika Anda memiliki seluruh koleksi tetapi hanya satu elemen yang menyebabkan masalah. Saya menggunakan kondisional sepanjang waktu

Selain breakpoint bersyarat, Anda memiliki opsi untuk mencatat pesan dan berhenti setelah sejumlah hit. Yang terakhir berguna ketika Anda memiliki kode yang berulang tanpa nilai unik tertentu untuk memicu jeda. Misalnya, Anda mungkin memiliki kode untuk merender komponen dalam kumpulan komponen. Jika komponen ke-13 menyebabkan malapetaka, Anda dapat menyetel jumlah pukulan ke 13. Saya harus menghitung secara manual berkali-kali untuk melihat nilai dalam fitur ini

Dengan setidaknya satu titik henti sementara yang ditetapkan, Anda siap menelusuri kode Anda

Melangkah melalui kode

Melangkah melalui kode adalah operasi yang kompleks. Ini sederhana untuk dikendalikan, tetapi ada banyak hal yang terjadi. Debugger akan mengevaluasi variabel, Anda dapat mengatur jam tangan pada variabel, dan Anda memiliki akses ke tumpukan panggilan. Setelah debugger dijeda pada breakpoint (atau dengan menekan tombol jeda secara manual/menekan F6), Anda siap untuk menelusuri kode

Gunakan skrip ini untuk mengikuti

<?php
phpinfo();

function step_over_me() {
    echo 'stepping over me';
}

function step_into_me() {
    step_over_me();
}

for ($i=0; $i < 100; $i++) {
    step_into_me();
}

?>
_

Anda dapat melangkah ke fungsi (F11), keluar dari fungsi (Shift + F11), dan melangkahi fungsi (F10). Anda harus terbiasa menggunakan tombol fungsi untuk menjalankan sesi debug;

Beberapa bahasa memungkinkan Anda untuk mundur dalam waktu. PHP tidak, tapi tidak apa-apa. Ini adalah bahasa scripting, dan itu akan menyebabkan masalah dengan deklarasi. Mari telusuri skrip ini dengan menggunakan F10

Tempatkan breakpoint pada baris phpinfo. Dengan server PHP Anda melayani halaman dan debugger Anda terpasang, muat ulang halaman web. Jika semuanya berjalan lancar, debugger Anda akan menyala dan berhenti di baris tersebut

Men-debug kode php di chrome

Selamat. Anda sekarang memiliki sesi debug aktif. Ikuti langkah-langkah ini untuk menelusuri kode

  1. Tekan F10 beberapa kali dan lihat debugger menelusuri kode
  2. Saat Anda masuk ke loop, masuk ke metode dengan F11
  3. Setelah Anda berada di dalam metode, Anda dapat menggunakan Shift + F11 untuk mundur. Semua kode akan tetap berjalan—hanya saja debugger Anda tidak akan mengikuti bagian tersebut
  4. Anda dapat menggunakan F5 untuk keluar dari loop dan melanjutkan ke akhir (atau breakpoint berikutnya, jika ada)

TIP. Debugger browser menggunakan F8 untuk melanjutkan karena F5 sudah dipetakan ke pemuatan ulang halaman. Ketidakcocokan kecil ini dapat membuat Anda tersandung saat beralih di antara alat browser dan IDE Anda

Melewatkan satu putaran

Sangat mudah untuk melewatkan satu putaran. Cukup atur breakpoint melewati loop dan gunakan F5 untuk melompat ke titik itu

Men-debug kode php di chrome

Seringkali, Anda ingin masuk ke loop setidaknya sekali sebelum melewatinya. Gunakan F11 untuk masuk ke dalamnya. Bungkus loop dalam fungsi sehingga Anda dapat melangkah keluar dengan Shift + F11 dan tidak kalah

Ada opsi lain, jika tersedia untuk Anda. Dijalankan ke kursor, dan terdengar seperti apa. Tempatkan kursor Anda di suatu tempat melewati loop dan gunakan opsi ini untuk melompat ke titik itu

Men-debug kode php di chrome

Debugger akan dijalankan dari posisinya saat ini ke kursor saat saya memilih opsi ini. Perhatikan bahwa sayangnya tidak ada pintasan keyboard untuk itu

Memeriksa variabel

Salah satu manfaat utama debug adalah Anda dapat memeriksa variabel saat menelusuri kode. Sebagian besar IDE menyertakan cara untuk memeriksa variabel lokal dan global. Selain itu, Anda dapat menonton variabel sehingga Anda tidak perlu memburunya di Locals atau Superglobals

Anda juga dapat menonton ekspresi. Ini bagus ketika Anda ingin melihat bagaimana ekspresi kompleks di dalam pernyataan if akan dievaluasi. Cukup salin ekspresi ke jam tangan dan Anda dapat melacak hasilnya saat nilainya berubah

Men-debug kode php di chrome

Saya telah menambahkan ekspresi jam tangan berikut. $jalur == “bla”. Dalam Kode VS, Anda dapat menyorot ekspresi dalam kode dan membuka menu konteks untuk melihat ekspresi

Men-debug kode php di chrome

Saya telah menyorot $i < 100 untuk menambahkannya ke ekspresi jam tangan saya. Anda juga dapat mengevaluasi ekspresi apa pun di konsol debug

Mengevaluasi di konsol debug

Anda juga dapat mengevaluasi ekspresi di konsol debug. Jika Anda perlu memeriksa sesuatu sekali, lebih baik mengevaluasinya di konsol

Buka konsol debug dan masukkan ekspresi

Men-debug kode php di chrome

Anda juga dapat memeriksa menu konteks untuk opsi mengevaluasi ekspresi yang dipilih. Berikut adalah hal-hal yang dapat Anda lakukan di konsol debug

  • Tetapkan variabel baru
  • Ubah nilai variabel
  • Jalankan fungsi (dalam kebanyakan kasus)
  • Mengevaluasi ekspresi (mis. g. , $i == 55)

Ini sering berguna untuk debugging

Membungkus barang

Kami telah membahas banyak hal di pos ini. Ini cukup untuk membantu Anda memulai dengan debugging PHP. Ini adalah topik yang sangat mendalam, tetapi cara terbaik untuk belajar adalah dengan melakukan. Berlatih debug sampai Anda menguasai tekniknya, dan Anda akan mendapatkan reputasi sebagai pembasmi bug yang luar biasa

Bagaimana saya bisa men-debug kode PHP?

Untuk memulai proses debug, tekan F5. Buka Chrome dan buka index. file php. Klik ekstensi XDebug Helper baru dan klik opsi Debug .

Bagaimana cara menggunakan konsol PHP di Chrome?

Untuk memulai, buka Google Chrome dan buka halaman web mana saja, klik kanan dan pilih Periksa untuk membuka Alat Pengembang Chrome. Konsol browser akan menjadi salah satu tab di Alat Pengembang. Dan Anda dapat mengujinya dengan menulis konsol JavaScript yang sama. perintah log

Apakah ada debugger PHP?

PHP dikirimkan dengan debugger interaktif phpdbg . Debugger eksternal juga dapat digunakan. Itu » Zend IDE menyertakan debugger, dan ada juga beberapa ekstensi debugger gratis seperti DBG di » http. // www. php-debugger. com/dbg/, the » Advanced PHP Debugger (APD) atau » Xdebug.

Bagaimana cara men-debug PHP secara lokal?

Pertama Anda perlu membuka PhpStorm dan pilih Run > Edit Configuration. Di sana Anda harus memilih + (Tambahkan konfigurasi baru) dan pilih "PHP Remote Debug". .
Ubah nama Server Anda menjadi sesuatu yang lebih menenangkan. .
Di kolom Host, ketikkan localhost Anda