Xdebug là gì? Một số cách thiết lập Xdebug hữu ích

Xdebug là một tiện ích quan trọng trong quá trình phát triển ứng dụng PHP, cung cấp cho các nhà phát triển khả năng gỡ lỗi hiệu quả và nâng cao khả năng kiểm tra mã của họ. Với khả năng chạy trên máy chủ và tích hợp mạnh mẽ với các IDE phổ biến như PhpStorm, VS Code, hay PhpED, Xdebug đã trở thành một công cụ không thể thiếu trong quy trình phát triển PHP. Trong bài viết này, chúng ta sẽ tìm hiểu sâu hơn về Xdebug và một số cách thiết lập Xdebug mà bạn có thể tận dụng trong công việc phát triển của mình.

Xdebug là gì?

Xdebug là một công cụ gỡ lỗi bước theo bước tích hợp chặt chẽ với các IDE để giúp việc đặt điểm dừng trong mã PHP trở nên đơn giản và cung cấp cái nhìn sâu hơn vào quá trình chạy của mã của bạn.

Xdebug là một tiện ích mở rộng của PHP và phải được cài đặt và biên dịch cùng với PHP. May mắn thay, rất nhiều công cụ phát triển địa phương giúp việc cài đặt và chạy Xdebug trở nên đơn giản.

Gỡ lỗi bước theo bước không phải là điều duy nhất mà Xdebug cho phép bạn làm. Dưới đây là các tính năng của Xdebug:

  • Gỡ lỗi bước theo bước: đặt các điểm dừng nơi việc thực thi mã dừng lại để bạn có thể từng bước chạy qua mã và đánh giá những gì đang xảy ra trong quá trình chạy ứng dụng.
  • Báo cáo lỗi tốt hơn khi Xdebug được kích hoạt và ứng dụng đang chạy.
  • Theo dõi
  • Phân tích hiệu suất
  • Phân tích mã phủ

Xdebug không phức tạp nhưng việc đảm bảo chúng ta biết cách nó hoạt động, ít nhất ở mức cao, là quan trọng để chúng ta hiểu rõ công cụ khi sử dụng. Điều này cũng làm cho quá trình cài đặt dễ hiểu hơn nếu chúng ta biết cách Xdebug hoạt động.

Cách Xdebug hoạt động

Việc hiểu biết, ít nhất ở mức cao về cách các công cụ bạn sử dụng hoạt động là rất quan trọng. Xdebug là một tiện ích mở rộng của PHP và chạy trên máy chủ cục bộ như một phần của PHP để chạy ứng dụng của bạn. Máy chủ web của chúng ta chạy trang web thông qua PHP sẽ cài đặt và kích hoạt Xdebug để chúng ta có thể sử dụng.

Khi Xdebug đang chạy, nó sẽ gọi lại vào IDE của bạn (như PhpStorm hoặc VS Code) từ máy chủ nơi nó đang chạy. IDE của bạn sẽ ngồi và lắng nghe cho kết nối đó trên một cổng cụ thể (thông thường là cổng 9000 hoặc 9003).

Bạn tải một trang trong trình duyệt cho dự án của bạn và khi điều đó xảy ra, Xdebug gửi một yêu cầu kết nối đến IDE của bạn và nói "hey, tôi đang nhận được một yêu cầu, bạn có gì cho tôi?". Tại thời điểm này, Xdebug và IDE của bạn bắt đầu giao tiếp thông qua giao thức DBGP. Điều này nghe có vẻ phức tạp (và có thể là vậy) nhưng đó chỉ là một giao thức được tạo bởi Xdebug để giao tiếp giữa nó và một IDE.

Thiết lập Xdebug

Thiết lập Xdebug với DDEV và PhpStorm

Xdebug chạy trên máy chủ, như một tiện ích mở rộng của PHP, vì vậy điều đầu tiên chúng ta cần làm là kích hoạt Xdebug trong container Docker của chúng ta được quản lý bởi DDEV.

May mắn thay, DDEV đã hỗ trợ điều này và có một lệnh mà chúng ta có thể sử dụng để bật hoặc tắt Xdebug. Điều này làm cho chúng ta có thể thiết lập liệu chúng ta có ở chế độ gỡ lỗi hay không.

$ ddev xdebug enable

Điều này kích hoạt Xdebug để nó chạy như một tiện ích mở rộng của PHP. Bây giờ nó sẽ có sẵn để gọi lại vào IDE của chúng ta trên cổng 9003 khi nhận được một yêu cầu HTTP.

Thiết lập Xdebug với mã DDEV và VS

Trong phần này, chúng ta sẽ học cách thiết lập Xdebug với VS Code chạy trên một máy chủ cục bộ trên DDEV. Xdebug chạy trên máy chủ, như một tiện ích mở rộng của PHP, vì vậy điều đầu tiên chúng ta cần làm là kích hoạt Xdebug trong container Docker của chúng ta được quản lý bởi DDEV.

May mắn thay, DDEV đã hỗ trợ điều này và có một lệnh mà chúng ta có thể sử dụng để bật hoặc tắt Xdebug. Điều này làm cho chúng ta có thể thiết lập liệu chúng ta có ở chế độ gỡ lỗi hay không.

$ ddev xdebug enable

Điều này kích hoạt Xdebug để nó chạy như một tiện ích mở rộng của PHP. Bây giờ nó sẽ có sẵn để gọi lại vào IDE của chúng ta trên cổng 9003 khi nhận được một yêu cầu HTTP.

Cấu hình tập tin launch.json cho DDEV và VS Code:

{
    "version": "0.2.0",
    "configurations": [
        {
            "name": "Listen for XDebug",
            "type": "php",
            "request": "launch",
            "hostname": "yourhostname.ddev.site",
            "port": 9003,
            "pathMappings": {
                "/var/www/html": ""
            }
        }
    ]
}

Thiết lập Xdebug với Nitro và PhpStorm

Trong video này, chúng ta sẽ học cách thiết lập Xdebug với PhpStorm chạy trên một máy chủ cục bộ trên Craft Nitro. Xdebug chạy trên máy chủ, như một tiện ích mở rộng của PHP, vì vậy điều đầu tiên chúng ta cần làm là kích hoạt Xdebug trong container Docker của chúng ta được quản lý bởi Craft Nitro.

May mắn thay, Craft Nitro đã hỗ trợ Xdebug và có một lệnh đơn giản mà chúng ta có thể chạy để bật hoặc tắt Xdebug.

$ nitro xon

Các lệnh Nitro như xon được nhận biết theo ngữ cảnh, vì vậy nếu bạn không ở trong thư mục dự án mà Nitro nhận ra, thì nó sẽ yêu cầu bạn chọn cho trang web nào bạn muốn bật Xdebug. Nếu bạn ở trong thư mục dự án, thì nó sẽ kích hoạt cho dự án đó.

Điều này kích hoạt Xdebug để nó chạy như một tiện ích mở rộng của PHP. Bây giờ nó sẽ có sẵn để gọi lại vào IDE của chúng ta trên cổng 9000 khi nhận được một yêu cầu HTTP.

Thiết lập Xdebug với Nitro và VS code

Phần này, chúng ta sẽ học cách thiết lập Xdebug với VS Code chạy trên một máy chủ cục bộ trên Nitro. Xdebug chạy trên máy chủ, như một tiện ích mở rộng của PHP, vì vậy điều đầu tiên chúng ta cần làm là kích hoạt Xdebug trong container Docker của chúng ta được quản lý bởi Nitro.

May mắn thay, Nitro đã hỗ trợ điều này và có một lệnh đơn giản mà chúng ta có thể sử dụng để bật hoặc tắt Xdebug.

$ nitro xon

Điều này kích hoạt Xdebug để nó chạy như một tiện ích mở rộng của PHP. Bây giờ nó sẽ có sẵn để gọi lại vào IDE của chúng ta trên cổng 9000 khi nhận được một yêu cầu HTTP.

Thiết lập Xdebug với MAMP Pro và PhpStorm

Chúng ta sẽ học cách thiết lập Xdebug với PhpStorm chạy trên một máy chủ cục bộ trên MAMP Pro. Xdebug chạy thông qua MAMP Pro, như một tiện ích mở rộng của PHP, vì vậy điều đầu tiên chúng ta cần làm là kích hoạt Xdebug trong cấu hình của MAMP Pro.

Để kích hoạt Xdebug trong MAMP Pro, chúng ta cần truy cập vào cài đặt PHP thông qua ứng dụng MAMP Pro.

  • Đầu tiên, chúng ta phải chuyển sang chế độ Expert View để hiển thị một số cài đặt bổ sung.
  • Tiếp theo, chọn PHP dưới Mục "Languages" trong thanh bên.
  • Trong phần "Extensions", chúng ta sẽ kiểm tra "Xdebug (Debugger)" để kích hoạt Xdebug.
  • Nhấn Save và sau đó chọn "Yes" để khởi động lại máy chủ để áp dụng thay đổi.

Điều này kích hoạt Xdebug để nó chạy như một tiện ích mở rộng của PHP. Bây giờ nó sẽ có sẵn để gọi lại vào IDE của chúng ta trên cổng 9000 khi nhận được một yêu cầu HTTP.

PhpStorm có tính năng cấu hình tự động cho Xdebug và với MAMP Pro, dường như nó hoạt động tốt ngay khi cài đặt, vì vậy bạn nên có thể chấp nhận các cài đặt của nó và tiếp tục với thiết lập của bạn.

Thiết lập Xdebug với MAMP Pro và VS code

Trong video này, chúng ta sẽ học cách thiết lập Xdebug với PhpStorm chạy trên một máy chủ cục bộ trên MAMP Pro. Xdebug chạy thông qua MAMP Pro, như một tiện ích mở rộng của PHP, vì vậy điều đầu tiên chúng ta cần làm là kích hoạt Xdebug trong cấu hình của MAMP Pro.

Để kích hoạt Xdebug trong MAMP Pro, chúng ta cần truy cập vào cài đặt PHP thông qua ứng dụng MAMP Pro.

  • Trước tiên, chúng ta phải chuyển sang chế độ Expert View để hiển thị một số cài đặt bổ sung.
  • Tiếp theo, chọn PHP dưới Mục "Languages" trong thanh bên.
  • Trong phần "Extensions", chúng ta sẽ kiểm tra "Xdebug (Debugger)" để kích hoạt Xdebug.
  • Nhấn Save và sau đó chọn "Yes" để khởi động lại máy chủ để áp dụng thay đổi.

Điều này kích hoạt Xdebug để nó chạy như một tiện ích mở rộng của PHP. Bây giờ nó sẽ có sẵn để gọi lại vào IDE của chúng ta trên cổng 9000 khi nhận được một yêu cầu HTTP.

PhpStorm có tính năng cấu hình tự động cho Xdebug và với MAMP Pro, dường như nó hoạt động tốt ngay khi cài đặt, vì vậy bạn nên có thể chấp nhận các cài đặt của nó và tiếp tục với thiết lập của bạn.

Cài đặt Extension php-debug cho VS Code:

Bước đầu tiên chúng ta cần thực hiện là thiết lập VSCode để xử lý các phiên gỡ lỗi Xdebug. Hãy cài đặt extension gọi là php-debug, cho phép chúng ta cấu hình và quản lý kết nối Xdebug từ máy chủ DDEV của chúng ta.

Trong VSCode, đi đến Extensions (shift-command-x trên Mac). Tìm kiếm php-debug và chọn extension của Felix Becker. Nó nên có hàng triệu lượt tải xuống.

Điều hướng đến phần Run and Debug của Code. Và chúng ta muốn tạo một tệp launch.json. Trong VS Code, tệp launch.json cho biết trình gỡ lỗi VS Code nên cung cấp cấu hình gỡ lỗi nào. Chúng ta muốn tạo một cấu hình gỡ lỗi chỉ cho Xdebug và máy chủ của chúng ta đang chạy trên MAMP Pro.

Khi chúng ta nhấp vào "create a launch.json file", sau đó chúng ta sẽ có trình soạn thảo mã với tệp đó được mở. Nếu, vì một lý do nào đó, nó không mở, thì bạn có thể truy cập nó trong các tệp dự án của bạn.

Bây giờ chúng ta muốn thêm một cấu hình mới vào tệp. Chúng ta có thể làm điều này thông qua "Add Configuration..." ở dưới màn hình hoặc chỉ cần dán mã sau vào:

{
    "version": "0.2.0",
    "configurations": [
        {
            "name": "Listen for XDebug",
            "type": "php",
            "request": "launch",
            "hostname": "yourhostname",
            "port": 9000,
        }
    ]
}

Thay thế "yourhostname" trong cài đặt hostname cho tên máy chủ của dự án MAMP Pro bạn đang chạy. Đối với tôi, đó sẽ là "xdebug-mamp". Nếu bạn không biết, bạn có thể xem phần Hosts trong MAMP Pro để lấy danh sách các tên máy chủ.

Sau đó, lưu tệp. Bạn sẽ thấy bảng chạy và gỡ lỗi thay đổi và bây giờ nhận ra cấu hình mới để lắng nghe các kết nối Xdebug.

VS Code hiện đã được cấu hình để lắng nghe trên cổng 9000 cho kết nối Xdebug.

Tóm lại, Xdebug là một công cụ mạnh mẽ giúp các nhà phát triển PHP gỡ lỗi và kiểm tra mã của họ một cách hiệu quả. Bằng cách kết hợp các tính năng như gỡ lỗi bước qua bước, báo cáo lỗi chi tiết, và phân tích hiệu suất, Xdebug giúp tăng cường quy trình phát triển và nâng cao chất lượng của ứng dụng PHP. Bằng cách sử dụng các cách thiết lập Xdebug được đề xuất, bạn có thể tận dụng tối đa tiềm năng của công cụ này và giúp đẩy nhanh tiến độ phát triển của dự án của mình.