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?

selfawaresoup
sumber
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.

kamu
sumber
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.

Andrew Hancox
sumber
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

oliver nadj
sumber
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 ...
outis
sumber
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
Joshua Dance
sumber
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.

pengguna2970583
sumber
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
Chukky Nze
sumber
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).

adm1n
sumber