Làm cách nào để kích hoạt trình biên dịch XDebug cho tập lệnh PHP dòng lệnh?


194

XDebug cung cấp chỉ thị cấu hình "xdebug.profiler_enable_trigger" cho phép kích hoạt cấu hình bằng cách chuyển tham số GET hoặc POST "XDEBUG_PROFILE" khi gọi tập lệnh qua HTTP. Điều này rất hữu ích nếu bạn không muốn định hình cho TẤT CẢ các tập lệnh của mình mà chỉ cho một vài trường hợp đặc biệt mà không phải luôn thay đổi cấu hình PHP của bạn.

Có cách nào để đạt được hành vi tương tự cho các chương trình PHP dòng lệnh không? Tôi đã cố gắng vượt qua "XDEBUG_PROFILE" làm đối số dòng lệnh nhưng nó không hoạt động.

Nói chung, cấu hình dòng lệnh PHP hoạt động tốt, nhưng tôi muốn có tính linh hoạt cho mỗi cuộc gọi giống như với trình duyệt và máy chủ HTTP.

Bất kỳ đề xuất?


Xin lỗi, tôi cũng đang thử cái này nhưng tôi không hiểu. Điều gì nên có trong tham số "XDEBUG_PROFILE"?
Andresch Serj

Không có vấn đề gì trong Thông số miễn là nó có mặt.
selfawaresoup

Thiếu hỗ trợ cho biến môi trường XDEBUG_PROFILE là lỗi 413 trong trình theo dõi lỗi XDebug.
outis

Câu trả lời:


257

Bạn có thể vượt qua cài đặt INI bằng -dcờ : php -d xdebug.profiler_enable=On script.php.


39
Trên các hệ thống dựa trên * nix, bạn có thể làm cho việc này dễ sử dụng hơn một chút bằng cách tạo bí danh, chẳng hạn như : alias phpp="php -d xdebug.profiler_enable=1". Theo cách đó, khi bạn không muốn cấu hình chỉ sử dụng phpvà khi bạn sử dụng phpp.
JC Yamokoski

14
Tôi đã phải xác định thư mục nào tôi muốn đầu ra profiler cũng được lưu vào, vì vậy điều này đã gây ra cho tôi : alias xphp="php -d xdebug.profiler_enable=On -d xdebug.profiler_output_dir=.". Điều đó luôn lưu trữ đầu ra gỡ lỗi trong thư mục làm việc hiện tại của bạn.
Lars Nyström

vâng, tôi thuộc Eclipse và XAMPP trong môi trường Win7. Nó hoạt động.
gouchaoer

4
Trên Windows, bạn có thể tạo trong thư mục PATH của mình một phpp.cmdtệp, chứa php -d xdebug.profiler_enable=On %*sau đó bạn có thể chạy một cách đơn giản phpp <args>.
Gras Double

43

Tôi đã làm việc này trên Ubuntu / Netbeans bằng cách:

  • sao chép các dòng cấu hình xdebug từ tệp /etc/php5/apache2/php.ini vào /etc/php5/cli/php.ini
  • đặt biến môi trường với tên của phiên gỡ lỗi (bạn có thể lấy mã này từ chuỗi truy vấn trong url của trang netbeans khởi chạy khi bạn bắt đầu gỡ lỗi) lệnh là: export XDEBUG_CONFIG = "idekey = netbeans-xdebug"

Sau đó, nó chỉ đơn giản là một trường hợp bắt đầu gỡ lỗi trong netbeans và thực hiện "php myscript.php" tại dòng lệnh.


2
Lưu ý: Sau khi bạn hoàn thành nếu bạn muốn giữ trình gỡ lỗi của mình lắng nghe và không kích hoạt nó bằng lệnh PHP, bạn chỉ có thể sử dụng: "hủy đặt XDEBUG_CONFIG".
Dan LaManna

Điều này thực sự hiệu quả với tôi trong khi câu trả lời ở trên thì không ;-)
Jonathan Liuti

4
Đây là về gỡ lỗi (bước qua kịch bản). Câu hỏi là về hồ sơ (phân tích hiệu suất của kịch bản, chức năng nào mất nhiều thời gian, v.v.)
Matthew Flaschen

32

với PhpStorm trên máy chủ web từ xa, tôi sử dụng lệnh này:

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

nơi server_nametượng trưng cho tên của máy chủ trong conifuguration dự án PhpStorm


5
tôi đã thêm cái này vào alias xphp="XDEBUG_CONFIG="idekey=PHPSTORM" PHP_IDE_CONFIG="serverName=example.com" php -d memory_limit=1G -d xdebug.remote_host=.bash_aliases echo $ SSH_CLIENT | cắt -d \ "= \" -f 2 | awk '{print $ 1}' "vì vậy khi tôi muốn gỡ lỗi, tôi sử dụng xphp thay vì php
oliver nadj

18

Như được mô tả trên trang Gỡ lỗi từ xa Xdebug , cấu hình cũng có thể được kích hoạt thông qua XDEBUG_CONFIGbiến môi trường bằng cách bao gồm một lệnh "profile_enable = 1":

XDEBUG_CONFIG="profiler_enable=1" php ...

Đây là câu trả lời được chấp nhận vì đây là phương pháp dễ tiếp cận nhất. Nhị phân PHP có thể được gói, nó có thể được đặt làm trình thông dịch #! / X / php tại những nơi bạn không muốn chạm vào. Sử dụng biến env, nó có thể được kích hoạt có chọn lọc
John

11

Tương tự, nhưng quy trình khác nhau để làm cho nó hoạt động với Netbeans trong khi phát triển trên VM.

Cần vượt qua trong cờ được kích hoạt từ xa, cờ tự động bắt đầu, cờ ide và tên của máy chủ từ xa của bạn.

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

4

Tôi đã tạo một kịch bản shell để xử lý gỡ lỗi máy khách.

tên tập lệnh: phpdebug

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

Tôi đặt tập lệnh này vào /usr/binvà cho nó thực thi quyền.

Kịch bản đưa các đối số được truyền vào phpdebug và gọi php bằng các đối số xdebug và nối các đối số được truyền vào tập lệnh shell, $ * ở cuối.


Có, trong trường hợp của tôi dù sao đi nữa, tất cả những gì tôi cần là thêm cài đặt INI cho máy chủ từ xa. Đó là tất cả những gì được yêu cầu để thực hiện sửa lỗi trong IDE của tôi từ lệnh PHP CLI.
Spencer Williams

Trên thực tế, tôi cũng cần phải thiết lập XDEBUG_CONFIGbiến môi trường. Chỉ vậy và các xdebug.remote_hostthiết lập làm cho nó hoạt động.
Spencer Williams

2

Trong PhpStorm 7 bằng WAMP, tôi đã làm việc này bằng cách sao chép các cài đặt xdebug đã hoạt động của mình từ C: \ wamp \ bin \ apache \ apache2.2.22 \ bin \ php.ini sang phần xdebug của C: \ wamp \ bin \ php \ phpX.YZ \ php.ini. Sau đó, tôi chạy kịch bản của mình như vậy:

php -d xdebug.idekey=PHPSTORM script.php

Điều này thậm chí đã làm việc để gỡ lỗi các kịch bản nghệ nhân laravel

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

0

Tài liệu từ Jetbrains

Để bắt đầu tập lệnh với gỡ lỗi bằng cách sử dụng các chuyển đổi dòng lệnh PHP Đặt một biến môi trường sẽ cho XDebug kết nối với IDE:

Windows / MacOS / Linux

export XDEBUG_CONFIG="idekey=123"  

Ở đây idekey nên có một giá trị ngẫu nhiên.

Khởi chạy PHP với các tùy chọn dòng lệnh sau:

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

Bạn có thể sử dụng 10.0.2.2 thay vì 127.0.0.1 với Vagrant (xem câu hỏi SO liên quan).

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.