Xdebug

Xdebug là gì?
Để làm gì?
Tại sao phải dùng xdebug?

Theo mình, Năng lực của 1 cá nhân nằm phần lớn ở khả năng giải quyết vấn đề, hay ae vẫn hay nói vui là “giải toán”
với ae dev cũng vậy, trong quá trình code thì đầy dãy những vấn đề, bài toán đặt ra, khả năng giải toán của ae quyết định trình độ của mình.

Trong quá trình làm việc dev thường phải đối mặt với 2 bài toán sau:


1. Tạo ra feature mới để đáp ứng nhu cầu của ngời dùng

2. Nếu có lỗi sảy ra, nhanh chóng tìm được và tìm cách fix chúng

Trong vòng đời phát triển phần mềm, tạo ra feature mới chỉ chiếm 20% thời gian còn lại là maintain và fixbug, vậy nếu biết dùng các công cụ hỗ trợ fixbug sẽ giúp ích cho ae rất nhiều trong quá trình làm việc

Trong thế giới lập trình có rất nhiều ngôn ngữ đi với các công cụ debug khác nhau. ở Eco phần lớn các dự án đang phát triển bằng PHP, vậy mình sẽ giới thiệu về Xdebug 1 trợ thủ đắc lực với ae dev PHP

Đôi dòng giới thiệu về xdebug

Xdebug là một tiện ích mở rộng dành cho PHP được phát triển bởi Derick Rethans, bắt đầu vào đầu những năm 2000, nhằm cung cấp một công cụ gỡ lỗi mạnh mẽ và hiệu quả cho các lập trình viên PHP. Dưới đây là những cột mốc quan trọng trong lịch sử phát triển của Xdebug:

1. Sự khởi đầu và động lực phát triển

Năm 2002, Xdebug được giới thiệu như một dự án mã nguồn mở. Lúc đó, PHP đã phát triển mạnh mẽ, nhưng công cụ gỡ lỗi cho PHP lại khá hạn chế. Hầu hết lập trình viên dựa vào phương pháp thủ công như var_dump() để kiểm tra biến, tìm lỗi và phân tích logic.

• Derick Rethans, với kinh nghiệm trong cộng đồng PHP, đã nhận thấy nhu cầu lớn về một công cụ gỡ lỗi chuyên nghiệp hơn cho ngôn ngữ này. Xdebug ra đời để giải quyết các vấn đề như gỡ lỗi, theo dõi lược đồ thực thi (stack trace), và phân tích hiệu suất (profiling).

2. Phiên bản đầu tiên

Phiên bản 1.0 của Xdebug ra mắt không lâu sau đó, cung cấp tính năng gỡ lỗi cơ bản và theo dõi lược đồ thực thi. Nó đã trở thành công cụ không thể thiếu đối với các lập trình viên PHP muốn nâng cao hiệu suất làm việc và phát hiện lỗi dễ dàng hơn.

3. Phát triển tính năng

• Trong những năm tiếp theo, Xdebug tiếp tục phát triển với việc bổ sung các tính năng mới như:

Debugging: Cho phép thiết lập breakpoints, xem giá trị biến và theo dõi từng bước thực thi của mã.

Profiling: Ghi lại thời gian thực thi của các hàm để phân tích hiệu suất.

Code Coverage: Hỗ trợ kiểm tra phạm vi bao phủ mã khi chạy các bài kiểm thử.

4. Hỗ trợ IDE và hệ sinh thái

Xdebug 2.0 ra mắt vào năm 2007 với những cải tiến lớn về hiệu suất và khả năng tương tác với các IDE như PHPStorm, NetBeans, và Visual Studio Code. Điều này đã giúp lập trình viên PHP có trải nghiệm gỡ lỗi mạnh mẽ hơn, đặc biệt khi tích hợp tốt với môi trường phát triển (IDE).

5. Xdebug 3.0 – Cải tiến lớn

Năm 2020, Xdebug 3.0 được phát hành với nhiều thay đổi lớn:

Cải thiện cấu hình: Cách cấu hình đơn giản hơn, với các chế độ (modes) riêng biệt như debug, develop, profile, và coverage. Việc quản lý cấu hình này giúp giảm bớt nhầm lẫn trong quá trình sử dụng.

Tối ưu hiệu suất: Xdebug 3.0 tối ưu hóa hiệu suất gỡ lỗi, giảm thiểu tác động đến thời gian thực thi của mã khi gỡ lỗi.

Giới thiệu các tính năng mới: Thêm khả năng phân tích hiệu suất chi tiết hơn, và cải tiến khả năng hiển thị lược đồ thực thi khi có lỗi xảy ra.

Chức năng chính của Xdebug

Xdebug cung cấp nhiều tính năng hữu ích, bao gồm:

Gỡ lỗi (Debugging): Xdebug cho phép bạn thiết lập các điểm ngắt (breakpoints), theo dõi biến (variable), và xem từng bước thực thi của chương trình. Điều này giúp bạn dễ dàng tìm ra lỗi trong mã nguồn PHP.

Theo dõi lược đồ thực thi (Stack Trace): Khi có lỗi, Xdebug cung cấp thông tin chi tiết về lược đồ thực thi, giúp bạn biết được mã lỗi nằm ở đâu trong chuỗi gọi hàm.

Hồ sơ hiệu suất (Profiling): Xdebug có thể ghi lại thông tin chi tiết về thời gian thực thi và bộ nhớ được sử dụng trong quá trình chạy mã. Từ đó, bạn có thể phân tích để tối ưu hóa hiệu suất.

Tạo code coverage: Hỗ trợ việc kiểm tra phạm vi bao phủ của mã (code coverage) khi thực hiện kiểm thử, giúp bạn xác định những đoạn mã chưa được kiểm tra.

Ứng dụng thực tế:
ae dev mới vào nghề thường debug như sau: đọc code khi thấy biến, hàm nào có vấn đề thì ở dòng đó sẽ dùng echo, var_dump(), ae dùng laravel sẽ là dump() hoặc dd()
để kiểm tra giá trị của biến, hàm v.v.

với những đoạn code đơn giản thì khá hiệu quả, nhưng khi phải dò tìm trên 1 khối code lớn hơn, hoặc 1 luồng code thì mất rất nhiều thời gian, với xdebug việc này trở nên dễ dàng hơn rất nhiều, ta chỉ cần đặt những điểm breakpoints và theo dõi giá trị của biến khi chương trình chạy tới

ví dụ thực tế

Vì exdebug là extension của PHP nên ae phải cài đặt trước khi sử dụng

phần cài đặt cũng khá đơn giản ae tự mò nhé 😀

dưới đây mình sẽ có 1 ví dụ đơn giản về exdebug với phpstorm

với 1 case khá phổ biến là test api:
giả sử code với laravel có 1 api sau:

Route::post('create-filter', [TiktokPlanningController::class, 'createFilter']);

gọi tới controller

 public function createFilter(CreateFilterRequest $request): JsonResponse
    {
        try {
            DB::beginTransaction();
            $data = $request->validated();
            $data['created_user_id'] = Creator::userId();
            $result = $this->filterService->createFilter($data);
            DB::commit();

            return ok(new FilterResource($result));
        } catch (\Exception $exception) {
            DB::rollBack();
            captureException($exception);

            return fail(__('sys.system_error'), 'ES');
        }

    }

giả sử ta muốn biết giá trị của data là gì, ta đặt breakpoint như trên
Dùng postman tạo 1 curl gọi đến api create-filter
khi submit phpstorm sẽ hiện thông báo như sau

có đầy đù các thông tin về data và các thông tin khác của request, khá tiện lợi
giả sử có lỗi chạy vào catch, ta cũng đặt breakpoin tương tự như trên
kết quả có thể như sau:

ta có thể đặt breackpoin vào những service, repository của luồng create data này để debug, rất tiện lợi


Mong rằng sau bài viết này ae có cái nhìn tổng quan về lợi ích của việc dùng Xdebug, chúc ae sớm làm chủ được công cụ hữu ích này

Related Posts