Thứ Năm, 26 tháng 10, 2023

16.Sử dụng Xdebug để gỡ rối khi lập trình PHP

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

  • Xdebug là gì?
  • Cài đặt Xdebug
  • Sử dụng Xdebug
  • Sử dụng Xdebug trong PHP container

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 IntoStep OverRestart ...

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.

PHP Debug

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

=============================
Website không bao giờ chứa bất kỳ quảng cáo nào, mọi đóng góp để duy trì phát triển cho website (donation) xin vui lòng gửi về STK 90.2142.8888 - Ngân hàng Vietcombank Thăng Long - TRAN VAN BINH
=============================
Nếu bạn muốn tiết kiệm 3-5 NĂM trên con đường trở thành DBA chuyên nghiệp thì hãy đăng ký ngay KHOÁ HỌC ORACLE DATABASE A-Z ENTERPRISE, được Coaching trực tiếp từ tôi với toàn bộ kinh nghiệm, thủ tục, quy trình, bí kíp thực chiến mà bạn sẽ KHÔNG THỂ tìm kiếm trên Internet/Google giúp bạn dễ dàng quản trị mọi hệ thống Core tại Việt Nam và trên thế giới, đỗ OCP.
- CÁCH ĐĂNG KÝ: Gõ (.) hoặc để lại số điện thoại hoặc inbox https://m.me/tranvanbinh.vn hoặc Hotline/Zalo 090.29.12.888
- Chi tiết tham khảo:
https://bit.ly/oaz_w
=============================
2 khóa học online qua video giúp bạn nhanh chóng có những kiến thức nền tảng về Linux, Oracle, học mọi nơi, chỉ cần có Internet/4G:
- Oracle cơ bản: https://bit.ly/admin1_1200
- Linux: https://bit.ly/linux_1200
=============================
KẾT NỐI VỚI CHUYÊN GIA TRẦN VĂN BÌNH:
📧 Mail: binhoracle@gmail.com
☎️ Mobile/Zalo: 0902912888
👨 Facebook: https://www.facebook.com/BinhOracleMaster
👨 Inbox Messenger: https://m.me/101036604657441 (profile)
👨 Fanpage: https://www.facebook.com/tranvanbinh.vn
👨 Inbox Fanpage: https://m.me/tranvanbinh.vn
👨👩 Group FB: https://www.facebook.com/groups/DBAVietNam
👨 Website: https://www.tranvanbinh.vn
👨 Blogger: https://tranvanbinhmaster.blogspot.com
🎬 Youtube: https://www.youtube.com/@binhguru
👨 Tiktok: https://www.tiktok.com/@binhguru
👨 Linkin: https://www.linkedin.com/in/binhoracle
👨 Twitter: https://twitter.com/binhguru
👨 Podcast: https://www.podbean.com/pu/pbblog-eskre-5f82d6
👨 Địa chỉ: Tòa nhà Sun Square - 21 Lê Đức Thọ - Phường Mỹ Đình 1 - Quận Nam Từ Liêm - TP.Hà Nội

=============================
oracle tutorial, học oracle database, Tự học Oracle, Tài liệu Oracle 12c tiếng Việt, Hướng dẫn sử dụng Oracle Database, Oracle SQL cơ bản, Oracle SQL là gì, Khóa học Oracle Hà Nội, Học chứng chỉ Oracle ở đầu, Khóa học Oracle online,sql tutorial, khóa học pl/sql tutorial, học dba, học dba ở việt nam, khóa học dba, khóa học dba sql, tài liệu học dba oracle, Khóa học Oracle online, học oracle sql, học oracle ở đâu tphcm, học oracle bắt đầu từ đâu, học oracle ở hà nội, oracle database tutorial, oracle database 12c, oracle database là gì, oracle database 11g, oracle download, oracle database 19c, oracle dba tutorial, oracle tunning, sql tunning , oracle 12c, oracle multitenant, Container Databases (CDB), Pluggable Databases (PDB), oracle cloud, oracle security, oracle fga, audit_trail,oracle RAC, ASM, oracle dataguard, oracle goldengate, mview, oracle exadata, oracle oca, oracle ocp, oracle ocm , oracle weblogic, postgresql tutorial, mysql tutorial, mariadb tutorial, ms sql server tutorial, nosql, mongodb tutorial, oci, cloud, middleware tutorial, hoc solaris tutorial, hoc linux tutorial, hoc aix tutorial, unix tutorial, securecrt, xshell, mobaxterm, putty

ĐỌC NHIỀU

Trần Văn Bình - Oracle Database Master