วิธีการเรียก XDebug profiler สำหรับสคริปต์ PHP บรรทัดคำสั่ง?


195

XDebug เสนอคำสั่งการกำหนดค่า "xdebug.profiler_enable_trigger" ที่อนุญาตให้เปิดใช้งานการทำโปรไฟล์โดยผ่านพารามิเตอร์ GET หรือ POST "XDEBUG_PROFILE" เมื่อเรียกใช้สคริปต์ผ่าน HTTP สิ่งนี้มีประโยชน์ถ้าคุณไม่ต้องการทำโปรไฟล์สำหรับสคริปต์ทั้งหมด แต่สำหรับบางกรณีพิเศษโดยไม่ต้องเปลี่ยนการกำหนดค่า PHP ของคุณเสมอ

มีวิธีการที่จะบรรลุพฤติกรรมเดียวกันสำหรับโปรแกรม PHP บรรทัดคำสั่งหรือไม่ ฉันพยายามส่ง "XDEBUG_PROFILE" เป็นอาร์กิวเมนต์บรรทัดคำสั่ง แต่ไม่ได้ผล

โดยทั่วไปแล้ว PHP บรรทัดคำสั่งการทำโปรไฟล์ทำงานได้ดี แต่ฉันต้องการความยืดหยุ่นต่อการโทรเช่นเดียวกับเบราว์เซอร์และเซิร์ฟเวอร์ HTTP

ข้อเสนอแนะใด ๆ


ขออภัยฉันกำลังลองสิ่งนี้อยู่ แต่ฉันไม่เข้าใจ สิ่งที่ควรอยู่ในพารามิเตอร์ "XDEBUG_PROFILE"
Andresch Serj

ไม่สำคัญว่าอะไรจะอยู่ในพารามิเตอร์ตราบใดที่มันมีอยู่ทั้งหมด
selfawaresoup

การขาดการสนับสนุนตัวแปรสภาพแวดล้อม XDEBUG_PROFILEคือบั๊ก 413 ในตัวติดตามบั๊ก XDebug
outis

คำตอบ:


258

คุณสามารถส่งผ่านการตั้งค่า INI กับธง:-dphp -d xdebug.profiler_enable=On script.php


39
เมื่อวันที่ * alias phpp="php -d xdebug.profiler_enable=1"ระบบระวังตามที่คุณสามารถทำนี้บิตง่ายต่อการใช้งานโดยการสร้างนามแฝงเช่น: วิธีที่ว่าเมื่อคุณไม่ต้องการที่จะใช้เพียงแค่รายละเอียดและเมื่อคุณทำใช้php phpp
JC Yamokoski

14
ผมต้องระบุไดเรกทอรีผมอยากเอาท์พุท Profiler ที่จะถูกบันทึกไว้ในเช่นกันดังนั้นนี้ woked alias xphp="php -d xdebug.profiler_enable=On -d xdebug.profiler_output_dir=."สำหรับฉัน: ที่เก็บผลลัพธ์การดีบักในไดเรกทอรีการทำงานปัจจุบันของคุณเสมอ
Lars Nyström

ใช่ฉันอยู่ภายใต้ Eclipse และ XAMPP ในสภาพแวดล้อม Win7 มันได้ผล.
gouchaoer

4
ใน Windows คุณสามารถสร้างไฟล์ใน PATH ของคุณได้phpp.cmdซึ่งphp -d xdebug.profiler_enable=On %*จะทำให้คุณสามารถเรียกphpp <args>ใช้ได้
Gras Double

43

ฉันได้รับสิ่งนี้ทำงานบน Ubuntu / Netbeans โดย:

  • คัดลอกบรรทัด xdebug config จากไฟล์ /etc/php5/apache2/php.ini ไปยัง /etc/php5/cli/php.ini
  • การตั้งค่าตัวแปรสภาพแวดล้อมด้วยชื่อของเซสชันการดีบัก (คุณสามารถรับสิ่งนี้ได้จากสตริงการสืบค้นใน url ของหน้า netbeans เรียกใช้เมื่อคุณเริ่มการดีบัก) คำสั่งคือ: export XDEBUG_CONFIG = "idekey = netbeans-xdebug"

จากนั้นเป็นกรณีของการเริ่มต้นการดีบักใน netbeans และทำ "php myscript.php" ที่บรรทัดคำสั่ง


2
หมายเหตุ: หลังจากคุณทำเสร็จแล้วหากคุณต้องการให้ดีบักเกอร์ฟังอยู่และไม่ทริกเกอร์ด้วยคำสั่ง PHP คุณสามารถใช้: "unset XDEBUG_CONFIG"
Dan LaManna

นี่ใช้งานได้จริงสำหรับฉันในขณะที่คำตอบข้างต้นไม่ใช่ ;-)
Jonathan Liuti

4
สิ่งนี้เกี่ยวกับการดีบัก (การดำเนินการผ่านสคริปต์) คำถามเกี่ยวกับการทำโปรไฟล์ (การวิเคราะห์ประสิทธิภาพของสคริปต์ฟังก์ชันที่ใช้เวลานาน ฯลฯ )
Matthew Flaschen

32

ด้วย PhpStorm บนเว็บเซิร์ฟเวอร์ระยะไกลฉันใช้คำสั่งนี้:

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

โดยที่server_nameย่อมาจากชื่อของเซิร์ฟเวอร์ในการรวบรวมโครงการ PhpStorm


5
ฉันได้เพิ่มส่วนนี้ลงใน. 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 | ตัด -d \ "= \" -f 2 | awk '{พิมพ์ $ 1}' "ดังนั้นเมื่อฉันต้องการดีบั๊กฉันใช้ xphp แทน php
oliver nadj

19

ตามที่อธิบายไว้ในหน้าการดีบัก Xdebug ระยะไกลการทำโปรไฟล์ยังสามารถเปิดใช้งานผ่านXDEBUG_CONFIGตัวแปรสภาพแวดล้อมโดยการรวมคำสั่ง "profile_enable = 1":

XDEBUG_CONFIG="profiler_enable=1" php ...

คำตอบนี้ควรเป็นคำตอบที่ยอมรับได้เนื่องจากเป็นวิธีที่เข้าถึงได้ง่ายที่สุด PHP ไบนารีอาจจะถูกห่ออาจถูกตั้งเป็นล่าม #! / x / php ในสถานที่ที่คุณไม่ต้องการสัมผัส การใช้ตัวแปร env สามารถเปิดใช้งานได้ตามต้องการ
John

11

กระบวนการที่คล้ายกัน แต่แตกต่างกันในการทำให้มันทำงานกับ Netbeans ในขณะที่พัฒนาบน VM

จำเป็นต้องผ่านในการเปิดใช้งานการตั้งค่าสถานะระยะไกลการเริ่มต้นโดยอัตโนมัติการตั้งค่าสถานะ IDE และชื่อของโฮสต์ระยะไกลของคุณ

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

4

ฉันสร้างเชลล์สคริปต์เพื่อจัดการกับการดีบักไคลเอ็นต์

ชื่อสคริปต์: phpdebug

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

ฉันวางสคริปต์นี้ไว้/usr/binและให้สิทธิ์ดำเนินการ

สคริปต์ใช้อาร์กิวเมนต์ที่ส่งผ่านไปยัง phpdebug และเรียก php ด้วยอาร์กิวเมนต์ xdebug และผนวกอาร์กิวเมนต์ที่ส่งผ่านไปยังสคริปต์เชลล์ $ * ที่ส่วนท้าย


ใช่ในกรณีของฉันสิ่งที่ฉันต้องการคือการเพิ่มการตั้งค่า INI สำหรับโฮสต์ระยะไกลของฉัน นั่นคือทั้งหมดที่ต้องทำการดีบักใน IDE ของฉันจากคำสั่ง PHP CLI
Spencer Williams

ที่จริงฉันต้องตั้งค่าXDEBUG_CONFIGตัวแปรสภาพแวดล้อมด้วย เพียงแค่นั้นและการxdebug.remote_hostตั้งค่าทำให้มันทำงาน
Spencer Williams

2

ใน PhpStorm 7 โดยใช้ WAMP ฉันได้สิ่งนี้เพื่อทำงานโดยคัดลอกการตั้งค่า xdebug ที่ทำงานอยู่แล้วจาก C: \ wamp \ bin \ apache \ apache2.2.22 \ bin \ php.ini ไปยังส่วน xdebug ของ C: \ wamp \ bin \ php \ phpX.YZ \ php.ini จากนั้นฉันก็รันสคริปต์ของฉันเช่นนั้น:

php -d xdebug.idekey=PHPSTORM script.php

สิ่งนี้ใช้ได้กับการดีบักสคริปต์สคริปต์ laravel ด้วย

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

0

เอกสารจาก Jetbrains

ในการเริ่มต้นสคริปต์ด้วยการดีบักโดยใช้สวิตช์บรรทัดคำสั่ง PHP ตั้งค่าตัวแปรสภาพแวดล้อมที่จะบอกให้ XDebug เชื่อมต่อกับ IDE:

Windows / MacOS / Linux

export XDEBUG_CONFIG="idekey=123"  

idekey นี่ควรมีค่าแบบสุ่ม

เรียกใช้งาน PHP ด้วยตัวเลือกบรรทัดคำสั่งต่อไปนี้:

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

คุณสามารถใช้ 10.0.2.2 แทน 127.0.0.1 กับ Vagrant (ดูคำถาม SO ที่เกี่ยวข้อง)

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.