Bagaimana memicu XDebug profiler untuk skrip PHP baris perintah?


194

XDebug menawarkan direktif konfigurasi "xdebug.profiler_enable_trigger" yang memungkinkan untuk mengaktifkan profil dengan mengirimkan parameter GET atau POST "XDEBUG_PROFILE" saat memanggil skrip melalui HTTP. Ini berguna jika Anda tidak ingin membuat profil untuk SEMUA skrip Anda tetapi hanya untuk beberapa kasus khusus tanpa selalu mengubah konfigurasi PHP Anda.

Apakah ada cara untuk mencapai perilaku yang sama untuk program PHP baris perintah? Saya mencoba meneruskan "XDEBUG_PROFILE" sebagai argumen baris perintah tapi tidak berhasil.

Secara umum, membuat profil baris perintah PHP berfungsi dengan baik, tetapi saya ingin memiliki fleksibilitas per panggilan yang sama dengan browser dan server HTTP.

Ada saran?


Maaf, saya juga mencoba ini tetapi saya tidak mengerti. Apa yang seharusnya ada di parameter "XDEBUG_PROFILE"?
Andresch Serj

Tidak masalah apa yang ada di Parameter selama itu ada.
selfawaresoup

Kurangnya dukungan untuk variabel lingkungan XDEBUG_PROFILE adalah bug 413 di pelacak bug XDebug.
outis

Jawaban:


257

Anda dapat melewati pengaturan INI dengan -dbendera: php -d xdebug.profiler_enable=On script.php.


39
Pada sistem * nix berbasis, Anda dapat membuat ini sedikit lebih mudah untuk digunakan dengan menciptakan sebuah alias, seperti: alias phpp="php -d xdebug.profiler_enable=1". Dengan begitu ketika Anda tidak ingin membuat profil, gunakan saja phpdan kapan Anda menggunakannya phpp.
JC Yamokoski

14
Aku harus menentukan direktori saya ingin output profiler yang akan disimpan dalam juga, jadi ini woked bagi saya: alias xphp="php -d xdebug.profiler_enable=On -d xdebug.profiler_output_dir=.". Itu selalu menyimpan hasil debug di direktori kerja Anda saat ini.
Lars Nyström

ya, saya di bawah Eclipse dan XAMPP di lingkungan Win7. Berhasil.
gouchaoer

4
Di Windows, Anda dapat membuat di dir PATH Anda phpp.cmdfile, berisi php -d xdebug.profiler_enable=On %*kemudian Anda bisa jalankan phpp <args>.
Gras Double

43

Saya menjalankan ini di Ubuntu / Netbeans dengan:

  • menyalin garis konfigurasi xdebug dari file /etc/php5/apache2/php.ini ke /etc/php5/cli/php.ini
  • mengatur variabel lingkungan dengan nama sesi debug (Anda bisa mendapatkan ini dari string kueri di url halaman yang diluncurkan netbeans saat Anda memulai debug) perintahnya adalah: export XDEBUG_CONFIG = "idekey = netbeans-xdebug"

Maka itu hanyalah kasus memulai debugging di netbeans dan melakukan "php myscript.php" di baris perintah.


2
Catatan: Setelah Anda selesai jika Anda ingin agar debugger Anda tetap mendengarkan dan tidak memicunya dengan perintah PHP, Anda cukup menggunakan: "unset XDEBUG_CONFIG".
Dan LaManna

Ini sebenarnya bekerja untuk saya sementara jawaban di atas tidak ;-)
Jonathan Liuti

4
Ini tentang debugging (melangkah melalui skrip). Pertanyaannya adalah tentang membuat profil (menganalisis kinerja skrip, fungsi apa yang membutuhkan waktu lama, dll.)
Matthew Flaschen

32

dengan PhpStorm di server web jarak jauh saya menggunakan perintah ini:

XDEBUG_CONFIG="idekey=PHPSTORM" PHP_IDE_CONFIG="serverName=server_name" php -dxdebug.remote_host=`echo $SSH_CLIENT | cut -d "=" -f 2 | awk '{print $1}'` myscript.php

di mana server_namesingkatan nama server dalam konifugurasi proyek PhpStorm


5
saya menambahkan ini ke .bash_aliases alias xphp="XDEBUG_CONFIG="idekey=PHPSTORM" PHP_IDE_CONFIG="serverName=example.com" php -d memory_limit=1G -d xdebug.remote_host=echo $ SSH_CLIENT | cut -d \ "= \" -f 2 | awk '{print $ 1}' "jadi ketika saya ingin men-debug saya menggunakan xphp bukan php
oliver nadj

18

Seperti yang dijelaskan pada halaman Xdebug Remote Debugging , pembuatan profil juga dapat diaktifkan melalui XDEBUG_CONFIGvariabel lingkungan dengan memasukkan direktif "profile_enable = 1":

XDEBUG_CONFIG="profiler_enable=1" php ...

Yang ini harus menjadi jawaban yang diterima karena ini adalah metode yang paling mudah diakses. Biner PHP mungkin dibungkus, mungkin ditetapkan sebagai interpreter #! / X / php di tempat-tempat yang tidak ingin Anda sentuh. Menggunakan variabel env dapat diaktifkan secara selektif
John

11

Mirip, tetapi proses yang berbeda untuk membuatnya bekerja dengan Netbeans saat mengembangkan pada VM.

Perlu melewati bendera yang diaktifkan jarak jauh, bendera mulai otomatis, bendera ide, dan nama host jarak jauh Anda.

php -dxdebug.remote_enable=1 -dxdebug.remote_autostart=On -dxdebug.idekey=netbeans-xdebug -dxdebug.remote_host=NAME.OF.HOST script.php

4

Saya membuat skrip shell untuk menangani debugging klien.

nama skrip: phpdebug

#!/usr/bin/ksh
php -dxdebug.remote_host=`echo $SSH_CLIENT | cut -d "=" -f 2 | awk '{print $1}'` $*

Saya menempatkan skrip ini di /usr/bin dan memberikannya mengeksekusi izin.

Script mengambil argumen yang diteruskan ke phpdebug dan memanggil php dengan argumen xdebug dan menambahkan argumen yang dilewatkan ke dalam skrip shell, $ * di bagian akhir.


Ya, dalam kasus saya, yang saya butuhkan adalah menambahkan pengaturan INI untuk host jarak jauh saya. Hanya itu yang diperlukan untuk melakukan debugging di IDE saya dari perintah PHP CLI.
Spencer Williams

Sebenarnya, saya juga perlu mengatur XDEBUG_CONFIGvariabel lingkungan. Hanya itu dan xdebug.remote_hostpengaturannya berhasil.
Spencer Williams

2

Dalam PhpStorm 7 menggunakan WAMP saya mendapatkan ini berfungsi dengan menyalin pengaturan xdebug saya sudah berfungsi dari C: \ wamp \ bin \ apache \ apache2.2.22 \ bin \ php.ini ke bagian xdebug dari C: \ wamp \ bin \ php \ phpX.YZ \ php.ini. Lalu saya menjalankan skrip saya seperti ini:

php -d xdebug.idekey=PHPSTORM script.php

Ini bahkan berfungsi untuk debugging skrip artisan laravel

php -d xdebug.idekey=PHPSTORM artisan db:seed --force

0

Dokumentasi dari Jetbrains

Untuk memulai skrip dengan debugging menggunakan sakelar baris perintah PHP Atur variabel lingkungan yang akan memberi tahu XDebug untuk terhubung ke IDE:

Windows / MacOS / Linux

export XDEBUG_CONFIG="idekey=123"  

Di sini idekey harus memiliki nilai acak.

Luncurkan PHP dengan opsi baris perintah berikut:

php -dxdebug.remote_enable=1 -dxdebug.remote_mode=req -dxdebug.remote_port=9000 -dxdebug.remote_host=127.0.0.1 -dxdebug.remote_connect_back=0 path/to/script.php

Anda dapat menggunakan 10.0.2.2 sebagai ganti 127.0.0.1 dengan Vagrant (lihat pertanyaan SO terkait).

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.