Rumah >pembangunan bahagian belakang >tutorial php >PHP Master | Debug dan profil php dengan xdebug

PHP Master | Debug dan profil php dengan xdebug

William Shakespeare
William Shakespeareasal
2025-02-25 23:30:11780semak imbas

xdebug: alat debugging dan analisis prestasi yang kuat untuk pemaju php

mata teras:

  • XDebug adalah sambungan pHP sumber yang kuat, bebas dan terbuka yang menyediakan sokongan debugging, stack jejak, analisis prestasi, liputan kod dan fungsi lain. Ia membolehkan pemaju menjeda pelaksanaan permohonan pada bila -bila masa dan periksa nilai pembolehubah untuk lebih memahami bagaimana PHP sedang berjalan.
  • XDebug boleh digunakan sebagai alat analisis prestasi untuk aplikasi PHP, merekodkan butiran penting seperti pernyataan dan fungsi masa pelaksanaan dan bilangan panggilan. Menganalisis output ini membolehkan anda memahami di mana kesesakan terletak, dengan itu mengoptimumkan permohonan anda untuk prestasi.
  • Untuk menggunakan Xdebug, ia perlu dipasang dan dikonfigurasi dengan betul. XDEBUG dipasangkan di XAMPP atau MAMP, hanya membolehkannya dalam php.ini. Untuk platform lain, ia boleh dipasang melalui pengurus pakej. Harus diingat bahawa menggunakan sambungan zend lain mungkin bertentangan dengan Xdebug.

PHP adalah bahasa yang paling popular dalam pembangunan web, tetapi ia sering dikritik kerana kekurangan debugger yang sesuai. Pemaju yang menggunakan bahasa seperti Java dan C# boleh menggunakan suite kuat alat debugging, sering disepadukan secara langsung ke dalam IDE mereka. Tetapi pemisahan pelayan web dan IDE PHP telah menghalang kami daripada menggunakan banyak alat yang sama. Kami secara manual menambah pernyataan debug ke kod ... sehingga Xdebug mengisi jurang ini. Xdebug adalah projek sumber terbuka percuma yang dibuat oleh Derick Rethans dan mungkin salah satu sambungan PHP yang paling berguna. Ia tidak hanya menyediakan sokongan debugging asas, tetapi juga stack jejak, analisis prestasi, liputan kod, dan banyak lagi. Artikel ini akan menerangkan cara memasang dan mengkonfigurasi XDEBUG, bagaimana untuk debug aplikasi PHP dari NetBeans, dan bagaimana untuk membaca laporan analisis prestasi dalam KCACHEGRIND.

3

Jika anda menggunakan XAMPP atau MAMP, XDEBUG dipasang sebelum ini; Jika anda menggunakan pemasangan berasaskan pakej pada platform seperti Ubuntu, anda boleh memasangnya melalui Pengurus Pakej menggunakan arahan seperti . Entri untuk xdebug di php.ini saya kelihatan seperti ini:

apt-get install php5-xdebug Tentukan laluan ke modul XDEBUG.

sama ada nilai togol nilai aktif.
<code>[xdebug]
zend_extension="/Applications/MAMP/bin/php5.2/lib/php/extensions/no-debug-non-zts-20060613/xdebug.so"
xdebug.remote_enable=1
xdebug.remote_host=localhost
xdebug.remote_port=9000</code>
adalah nama sistem atau alamat IP anda (di sini saya menyatakan

kerana saya berdua bekerja pada mesin yang sama, tetapi jika anda perlu menentukan nilai yang berbeza untuk tetapan anda, nilai boleh menjadi alamat IP atau nama hos DNS) . zend_extension adalah port di mana pelanggan mendengar dari sambungan XDebug (9000 adalah lalai). Apabila menggunakan XDEBUG, pastikan anda memastikan anda tidak menggunakan sambungan Zend lain kerana mereka mungkin bertentangan dengan XDEBUG. Terdapat pilihan pemasangan lain. Laman web XDebug menyediakan wizard mudah untuk membimbing anda melalui proses pemasangan. Anda boleh mendapatkan output xdebug.remote_enable atau xdebug.remote_host, tampalkannya ke dalam kotak teks, biarkan wizard menganalisis konfigurasi pelayan anda, dan membimbing anda tentang cara menyusun Xdebug pada mesin anda. localhost xdebug.remote_port phpinfo() Debug php –i

Biasanya, ia menggoda untuk debug menggunakan gabungan var_dump() dan exit/die(). Tetapi masalah dengan pendekatan ini ialah anda perlu mengubah suai kod untuk debug; Xdebug mengatasi ini dengan membolehkan anda menjeda pelaksanaan permohonan anda di mana sahaja anda memerlukannya. Anda kemudian boleh menyemak nilai -nilai pembolehubah dalam skop itu untuk lebih memahami bagaimana PHP sedang berjalan. Anda boleh dengan mudah mengkonfigurasi NetBeans untuk bertindak sebagai pelanggan XDEBUG. Buka tetingkap Pilihan (Alat & GT; Pilihan), dan pergi ke tab Debug di bahagian PHP. Masukkan port debug dan ID sesi yang diberikan dalam php.ini, dan anda perlu lulus ID sesi menggunakan permintaan yang anda mahu debug. Anda kini boleh menjalankan debugger dengan mengklik debug dalam tab Alat.

PHP Master | Debugging and Profiling PHP with Xdebug

Selepas membuka fail sumber, klik butang "Debug" dalam bar alat untuk memulakan debugging. Ia akan membuka permohonan dalam penyemak imbas dan jika pilihan "STOP ON FIRST LINE" telah didayakan dalam tetingkap Pilihan, pelaksanaan PHP akan dijeda pada baris pertama fail. Jika tidak, ia akan berjalan sehingga titik putus pertama ditemui. Dari sana, anda boleh menggunakan butang Teruskan untuk meneruskan ke titik putus seterusnya. Sila ambil perhatian bahawa parameter XDEBUG_SESSION_START dalam bar url penyemak imbas. Untuk mencetuskan debugger, xdebug_session_start mesti diluluskan sebagai parameter permintaan (get/post) atau xdebug_session sebagai parameter cookie. Terdapat beberapa operasi berguna lain dalam bar alat debug. Mereka adalah:

    Langkah demi Langkah - Langkau garis pelaksanaan yang sedang berjalan
  • langkah tunggal ke dalam fungsi (untuk fungsi yang tidak dibina)
  • satu langkah keluar-lompat keluar dari fungsi semasa
anda boleh menambah titik putus dengan mengklik nombor baris dalam margin editor dan kemudian jeda pelaksanaan pada titik putus. Mereka boleh dipadam dengan mengkliknya lagi. Atau, pergi ke Window> Debug> Breakpoints, yang akan menyenaraikan semua titik putus dalam program ini, anda boleh memilih/menyahpasang hanya titik putus yang anda perlukan. Semasa runtime, status pembolehubah dalam skop semasa dipaparkan dalam tetingkap pembolehubah. Ia akan memaparkan nilai -nilai pembolehubah tempatan dan pembolehubah global super seperti

, $_COOKIE, $_GET, $_POST, dan $_SERVER). Anda boleh melihat bagaimana nilai mereka berubah ketika anda melangkah melalui pernyataan.

PHP Master | Debugging and Profiling PHP with Xdebug

Analisis Prestasi

Analisis prestasi adalah langkah pertama dalam mengoptimumkan sebarang aplikasi. Alat analisis prestasi merekodkan butiran penting, seperti masa yang diperlukan untuk pernyataan dan fungsi untuk dilaksanakan, bilangan panggilan, dll. Output boleh dianalisis untuk memahami di mana kesesakan terletak. Xdebug juga boleh digunakan sebagai alat analisis prestasi untuk PHP. Untuk mula menganalisis aplikasi anda, tambahkan tetapan berikut ke php.ini:

<code>[xdebug]
zend_extension="/Applications/MAMP/bin/php5.2/lib/php/extensions/no-debug-non-zts-20060613/xdebug.so"
xdebug.remote_enable=1
xdebug.remote_host=localhost
xdebug.remote_port=9000</code>

Analisis hartanah dilumpuhkan secara lalai dalam XDEBUG, jadi xdebug.profiler_enable digunakan untuk membolehkannya. xdebug.profiler_output_name adalah nama fail log Analyzer Prestasi (spesifikasi %t menambahkan timestamp ke nama fail; lihat dokumentasi untuk senarai lengkap specifiers). Xdebug menyimpan output analisis prestasi dalam direktori yang ditentukan oleh xdebug.profiler_output_dir. Anda boleh mengubahnya ke mana sahaja yang anda pilih, tetapi ingat bahawa akaun pengguna yang menjalankan skrip PHP mesti mempunyai kebenaran menulis kepadanya. Analisis prestasi boleh merendahkan prestasi kerana enjin PHP perlu melihat setiap panggilan fungsi dan merekodkan butirannya, jadi anda tidak mahu menjalankannya sepanjang masa. xdebug.profiler_enable_trigger Mengarahkan Xdebug untuk melakukan analisis prestasi hanya apabila XDEBUG_PROFILE diluluskan sebagai parameter GET atau POST. Saiz fail log yang dibuat oleh XDEBUG mungkin berbeza -beza bergantung kepada operasi permohonan. Juga, ia tidak begitu mudah dibaca. Anda perlu menggunakan program seperti KCachegrind atau Webgrind untuk melihatnya. KCACHEGRIND adalah alat visualisasi data analisis prestasi KDE yang memerlukan persekitaran Unix untuk dijalankan, dan WebGrind adalah alat berasaskan web. Membuka fail log analisis prestasi di kcachegrind akan menunjukkan kos setiap panggilan fungsi bermula dari utama (). Berikut adalah visualisasi kcachegrind bagi output analisis prestasi fungsi faktorial:

PHP Master | Debugging and Profiling PHP with Xdebug

Panel kiri (ringkasan fungsi) memaparkan masa yang dihabiskan untuk setiap fungsi mengikut urutan pelaksanaan. Panel di sudut kanan atas memaparkan maklumat yang sama secara grafik, dengan saiz yang sepadan dengan kos fungsi. Grafik panggilan mewakili hubungan antara fungsi dalam aplikasi. Dalam contoh ini, terdapat hanya dua fungsi, utama () dan fakta (). fakta () adalah fungsi rekursif, yang diwakili oleh gelung dalam angka tersebut. Apabila mengoptimumkan kod anda, anda harus mencari kawasan dengan jumlah kos tertinggi. Biasanya, operasi I/O adalah yang paling mahal. Ingatlah untuk meminimumkan mereka sebanyak mungkin. Memuatkan fail malas di mana sahaja bermakna. Katakan anda mempunyai kelas yang dipanggil pesanan yang akan memberi anda senarai semua pesanan dan butiran mereka dari kedai dalam talian anda.

<code>xdebug.profiler_enable = 1
xdebug.profiler_output_name = xdebug.out.%t
xdebug.profiler_output_dir = /tmp
xdebug.profiler_enable_trigger = 1</code>
Kelas ini mempunyai dua kaedah: getAll () dan getDetails (). Apabila anda memanggil kaedah getall (), ia akan mendapat semua rekod dalam jadual pesanan dan gelung melalui mereka untuk mendapatkan butiran semua rekod. Mari kita lihat maklumat analisis prestasi.

PHP Master | Debugging and Profiling PHP with Xdebug Walaupun nombor mutlak tidak penting, kerana ia bergantung pada platform dan keadaan runtime, anda akan memahami kos relatif fungsi yang berbeza. Perhatikan bahawa beberapa fungsi dipanggil beratus -ratus kali (yang sudah tentu buruk). Kod ini tidak perlu gelung melalui semua pesanan dan mendapatkan butiran setiap pesanan secara berasingan. Mari mengatasi fungsi getAl () untuk menggunakan Join.

Analisis prestasi kini menghasilkan hasil yang lebih baik kerana bilangan pertanyaan dikurangkan. Di samping itu, kod tidak lagi memanggil fungsi getDetails ().
<code class="language-php"><?php
class Orders
{
    protected $db;

    public function __construct(PDO $db) {
        $this->db = $db;
    }

    public function getAll() {
        $orders = array();
        $query = "SELECT * FROM orders";
        $result = $this->db->query($query);
        while ($row = $result->fetch(PDO::FETCH_ASSOC)) {
            $row['details'] =
                $this->getDetails($row['orderId']);
            $orders[] = $row;
        }

        return $orders;
    }

    public function getDetails($orderId){
        $details = array();
        $result = $this->db->query("SELECT * FROM orderdetails WHERE orderId = " . $orderId);
        while ($row = $result->fetch(PDO::FETCH_ASSOC)) {
            $details[] = $row;
        }
        return $details;
    }
}</code>

Ringkasan

XDEBUG bertindak sebagai perantara dan mengawal pelaksanaan program PHP di pelayan. Dalam artikel ini, anda telah melihat dua ciri yang paling mengagumkan dari sokongan XDEBUG - sokongan debug dan analisis prestasi. Debugging jauhnya membolehkan anda menyemak nilai pada runtime tanpa mengubah suai program, dengan itu memberi anda pemahaman yang lebih baik tentang bagaimana PHP sedang berjalan. Analisis prestasi membantu mengenal pasti kesesakan dalam kod anda supaya anda dapat mengoptimumkannya untuk prestasi. Saya harap artikel ini membantu anda memahami manfaat Xdebug dan menggalakkan anda untuk mula menggunakannya dengan segera (jika anda belum menggunakannya). Jika anda mendapati ini alat yang berharga, anda mungkin ingin mempertimbangkan untuk menyokong projek hebat ini dengan membeli perjanjian sokongan.

(Sila ambil perhatian: Pemegang tempat gambar di atas perlu digantikan dengan tangkapan skrin sebenar.)

Atas ialah kandungan terperinci PHP Master | Debug dan profil php dengan xdebug. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Artikel sebelumnya:PHP Master | Pengenalan kepada Undang -undang DemeterArtikel seterusnya:tiada