Hướng dẫn cài đặt Xdebug
và sử dụng XDebug để gỡ rối PHP với IDE phổ biến như Visual Studio Code, PHPStorm
Giới thiệu về Xdebug
Xdebug là một extension dành cho PHP, khi cài đặt nó nó sẽ cập nhật lại việc hiện thị lỗi, cập nhật một số lệnh có sẵn (như var_dump
), đặc biệt nó cho phép kết nối đến các IDE (như Visual Studio Code, PHPStorm ...) để gỡ rối mã PHP, lúc này từ IDE có thể thực hiện việc đặt các breakpoint
(điểm dừng mã để trích xuất, xem các thông tin ...) cũng như các thao tác Debug như : Step Into
, Step Over
, Restart
...
Cài đặt Xdebug
Cài đặt Xdebug trong PHP chạy trực tiếp trên Linux, macOS
Bạn dùng PEAR/PECL để cài đặt. Mặc định thì lệnh pecl
có sẵn khi cài PHP trên macOS với brew (xem phần cài đặt PHP trên macOS). Trên Linux ví dụ CentOS nếu chưa có pecl thì gõ lệnh sau để cải đặt
yum install php-pear
Gõ lệnh pecl sau để cài đặt Xdebug
pecl install xdebug
Sau khi cài đặt cần thêm dòng sau vào php.ini
để PHP nạp extension này:
zend_extension="/usr/local/php/modules/xdebug.so"
(Đường dẫn tới xdebug.so có thể khác trên máy bạn - xem kết quả lệnh cài xdebug để biết nó ở đâu)
Cuối cùng gõ lệnh sau để kiểm tra xem PHP có nạp được Xdebug chưa
php -m | grep "xdebug"
Nếu hiện thị dòng xdebug là thành công
Cài đặt Xdebug trong PHP trên Windows
Đối với PHP trên Windows bạn cần tải về một file thư viện xdebug.x.x..dll
thích hợp, hãy chạy một script php từ trình duyệt có nội dung:
<?php phpinfo();
Khi chạy script đó, từ trình duyệt có kết quả dạng:
Hãy chọn tất cả nội dung xuất ra đó (Ctrl - A), rồi copy (Ctrl - C) rồi vào trang xdebug wizard, dán toàn bộ nội dung có được vào hộp nhập liệu của trang đó. Sau đó bấm vào nút bấm Analyse my phpinfo() output
, sau khi nó phân tích thì sẽ có đường link để bạn tải xdebug thích hợp về máy. Ví dụ, file tải về là php_xdebug-2.7.2-7.2-vc15-x86_64.dll
, hãy lưu vào thư mục chứa phần mở rộng của PHP, trên máy tôi là C:\wamp64\bin\php\php7.2.18\zend_ext
Sau đó thêm vào php.ini
(ví dụ C:\wamp64\bin\php\php7.2.18\ini) nội dung:
zend_extension = C:\wamp64\bin\php\php7.2.18\zend_ext\php_xdebug-2.7.2-7.2-vc15-x86_64.dll
Sử dụng Xdebug trong Visual Studio Code và PHPStorm
Phần này hướng dẫn cấu hình sử dụng Xdebug trên 2 IDE nổi tiếng dành cho PHP, một cái miễn phí là Visual Studio Code và cái kia là PHPStorm.
Cấu hình Xdebug
Trước khi cấu hình nắm một số nguyên tắc làm việc của Xdebug khi kết nối với IDE như sau: IDE phải tạo ra một phiên làm việc và mở ra một cổng (mặc định 9000, với địa chỉ IP, mặc định localhost) để XDebug của PHP kết nối vào mỗi khi PHP chạy các script.
Bạn cập nhật vào php.ini
nội dung sau:
xdebug.remote_enable=1 xdebug.remote_connect_back=1 xdebug.remote_autostart=1 xdebug.remote_connect_back=1 xdebug.remote_port=9000 xdebug.profiler_enable=0 xdebug.var_display_max_depth = 5 xdebug.var_display_max_children = 256 xdebug.var_display_max_data = 1024 xdebug.profiler_enable=0 #xdebug.remote_log = /var/logs/xdebug.log - chỉnh đến đường dẫn lưu log xdebug.remote_connect_back=0 xdebug.remote_host=localhost
Thực hiện Debug trên Visual Studio Code
Trong Visual Studio Code, cần cài đặt Extension có tên PHP Debug
, phần mở rộng này cho phép tạo ra Client lắng nghe trên cổng do bạn
ấn định để xDebug kết nối vào.
Khi mở dự án PHP của bạn xong, chọn biểu tượng Debug (hình con bọ), sau đó chọn biểu tượng bánh xe, chọn Add Config PHP
cấu hình như hình dưới:
Sau khi chọn xong, nó sẽ tạo ra file launch.json
, bạn sửa đổi file này nội dung như sau:
{ // Use IntelliSense to learn about possible attributes. // Hover to view descriptions of existing attributes. // For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387 "version": "0.2.0", "configurations": [ { "name": "Listen for XDebug", "type": "php", "request": "launch", "port": 9000, "hostname": "localhost" }, { "name": "Launch currently open script", "type": "php", "request": "launch", "program": "${file}", "cwd": "${fileDirname}", "port": 9000, } ] }
Lúc này, bạn có thể đặt breakpoint, hoặc gỡ rối nếu phát sinh ngoại lệ. Bạn bấm vào nút mũi tên xanh (play) để bắt đầu tạo client phiên làm việc, lắng nghe Xdebug kết nối tới ở cống 9000
của localhost
, nó xuất hiện như hình dưới.
Giả sử đặt breakpoint vào file test.php, khi chạy file này từ trình duyệt hoặc CLI, lập tức XDebug hoạt động.
Bạn đã bắt đầu có thể thực hiện các thao tác debug (step over, step into ...), trong quá trình này bạn sẽ giám sát được giá trị các biến, call stack ...
Thực hiện Debug với PHPStorm
Nếu phát triển dự án PHP với PHPStorm thì cấu hình để nó kết nối với Xdebug như sau: Mở hộp thoại Preferences
, Settings tìm đến mục Xdebug và nhập các thông tin như sau:
Khi cấu hình xong, muốn bắt đầu một phiên debug thì bấm vào biểu tượng điện thoại (Start Listening for PHP Debug ...), sau đó có thể đặt breakpoint, phát sinh ngoại lệ ... để Debug. Khi chạy code nếu phát sinh ngoại lệ, hoặc đến breakpoint chương trình sẽ tạp dừng và xuất hiện khu vực Debug trong PHPStorm
Sử dụng Xdebug trong PHP Container Docker
Trong phần này thực hiện trên PHP Container với cấu trúc và thư mục chia sẻ code ... đúng như hướng dẫn tại
Cài đặt PHP FPM - tuy nhiên có thêm ánh xạ cổng XDebug 9001
(thêm tham số -p 9001:9001
khi chạy container này)(chọn 9001 vì cổng 9000 có thể PHP FPM đang chiếm), đồng thời cũng có Container Apache cài đặt giống như
Cài đặt và cấu hình Apache Container
Theo như cấu trúc trên thì dự án PHP code lưu ở máy host tại thư mục /mycode/php
tương ứng trong
các container là đường dẫn /home/phpcode
, bạn nhớ cấu trúc này vì cần trong thiết lập XDebug PHP
Cài đặt XDebug vào PHP Container
Container PHP đang chạy có đặt tên là c-php
, khi nó đang chạy hãy vào terminal của container bằng lệnh:
docker exec -it c-php bash
Sau đó gõ lần lượt các lệnh sau để cài đặt XDebug
apt-get update apt-get upgrade -y apt-get install -y --force-yes curl git nano zlib1g-dev apt-get install libzip-dev docker-php-ext-install zip docker-php-ext-enable zip pecl install xdebug docker-php-ext-enable xdebug
Sau khi cài đặt xong, gõ lệnh php -v
, nếu hiện thị có dòng with Xdebug v2.7.2, Copyright (c) 2002-2019, by Derick Rethans
thì đã cài đặt thành công extension này vào PHP
Cấu hình để XDebug cho phép Remote Debug
Bạn mở file /usr/local/etc/php/conf.d/docker-php-ext-xdebug.ini
trong container c-php
thêm vào các cấu hình sau:
xdebug.remote_enable=1 xdebug.remote_connect_back=0 xdebug.remote_autostart=1 xdebug.remote_port=9001 xdebug.profiler_enable=0 xdebug.var_display_max_depth = 5 xdebug.var_display_max_children = 256 xdebug.var_display_max_data = 1024 xdebug.profiler_enable=0 xdebug.remote_log = /xdebug.log xdebug.idekey = docker xdebug.remote_host=192.168.1.5
Sau khi thêm vào khởi động lại container, mọi tình trạng hoạt động được ghi ra log tại /xdebug.log
, địa chỉ 192.168.1.5
là IP máy host, hãy thay bằng IP máy host của bạn. Khởi động lại container khi đã cấu hình xong.
Trên macOS, Linux có thể gõ ifconfig | grep "inet " | grep -v 127.0.0.1
để xem địa chỉa IP của máy HOST. Trên Windows gõ ipconfig
Thiết lập Visual Studio Code để Debug với PHP Container
Chỉ việc sửa đổi file launch.json
{ // Use IntelliSense to learn about possible attributes. // Hover to view descriptions of existing attributes. // For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387 "version": "0.2.0", "configurations": [ { "name": "Listen for XDebug", "type": "php", "request": "launch", "port": 9001, "hostname": "192.168.1.5", "pathMappings": { "/home/phpcode": "/mycode/php" } }, { "name": "Launch currently open script", "type": "php", "request": "launch", "program": "${file}", "cwd": "${fileDirname}", "port": 9001, } ] }
Hãy chú ý mục pathMappings, hostname, port. Đến đây thì có thể Debug PHP Docker giống như PHP trực tiếp ở trên. Tương tự dành cho PHPStorm, chỉ việc thay cổng 900 thành 9001