PHP Xdebug- Developer đừng lo ! Những bugs khó nhằn cứ để anh soi.[PART 1]

PHP Xdebug- Developer đừng lo ! Những bugs khó nhằn cứ để anh soi.[PART 1]

5 điều tôi không thích ở PHP
Laravel – Tận dụng Traits cho Model
Thử dùng Envoy của Laravel để viết script deploy cho ứng dụng web

Gần đây tôi bắt đầu trở lại với các dự án PHP sau một thời gian làm việc với Perl. Hầu như các dự án tôi làm là với CMS WordPressFramework Larvel.

Khi những dự án của tôi bắt đầu vào giai đoạn cuối tôi bắt đầu gặp phải những bugs khó nhằn. Mà tôi tin rằng dự án nào cũng thế thôi càng về sau thì bắt đầu phát sinh ra các bugs được các Coder thở ngắn than dài với Lead của mình là “Sai thế *éo nào được nhỉ a?”, “Em đang tìm hiểu và đang không hiểu nó chạy sai kiểu gì!”, hoặc bắt đầu đổi lỗi cho các thứ khác như “Hay ông trời ơi đất hỡi nào (tester hoặc khách hàng 😀 ) sửa data bằng tay trong databases nhỉ?”. Vâng đấy là nhận định chủ quan từ phía Coder mà không hề đưa ra được bằng chứng thuyết phục mà không thuyết phục thì bọn trời ơi đất hỡi họ sẽ không nghe đâu. 😀

Thôi thì phận làm coder cắn răng chịu đựng và bắt đầu cong mông lên đi soi xem lý do củ chuối nào khiến code của mình chạy đang đúng thành sai 🙂 .  Với PHP bạn có thể sử dụng các chức năng như error_log, print hay var_dump. Nhưng đôi khi những thứ đó chưa đủ để chúng ta kết luận ra nguyên nhân của bug và tôi tin rằng việc sử dụng các cách như trên sẽ khiến cho năng suất làm việc của bạn giảm xuống. Trung thực mà nói thì các developer với PHP hầu hết chúng ta đang sử dụng những cách này để debug (không phải 1 lần mà rất nhiều lần).

Chắc hẳn các bạn đã quá quen với devtools của Chorme với Javascript, nó có thể soi bất kỳ chỗ nào bạn muốn, xem value của bất kỳ biến nào bạn muốn hay đường đi nước bước trong code của bạn ra sao. Vâng thế tại sao chúng ta không thể debug PHP tương tự như Javascript nhỉ? Câu trả lời là đó chính là Xdebug anh hùng cứu vớt cuộc đời coder của chúng ta. 😀

Trong loạt bài này, tôi sẽ giới thiệu cho các bạn lí do tại sao sử dụng Xdebug, thiết lập, sử dụng nó như thế nào, tận dụng tối đa những gì nó có áp dụng vào công việc code để anh em coder cảm thấy nhẹ nhàng hơn mỗi khi gặp bug khó 🙂 .

Một vài năm trước, khi tôi chưa hề biết các trình gỡ lỗi tồn tại, và cũng chưa bao giờ nghe đến Xdebug thì tôi khá hài lòng với việc sử dụng các cách gỡ lỗi của PHP mà tôi đề cập ở trên (nói cách khác là tôi chưa tìm ra cách tốt hơn và chấp nhận nó). Cho đến khi anh leader đầu tiên của tôi giới thiệu về Xdebug cho tôi và tôi bắt đầu thấy nó ngon hơn mình tưởng. Hồi đó tôi làm Magento anh leader có giao cho tôi task Guide cài đặt local stack trên Windows (Slide tại đây) trong slide tôi có đề cập đến việc cài đặt Apache, PHP, MySQL, Xdebug, phpmyadmin và send mail các bạn có thể tham khảo (Slide này tôi viết năm 2014 nên đến nay có thể một số thứ sẽ thay đổi ). Sau khi quay trở lại PHP thì thực tế thì tôi vẫn đang dùng debug bằng những cách của PHP mà quên mất rằng ngày xưa mình đã từng dùng Xdebug :)) . Bài viết này được ra đời là do trong lúc tôi lục lại đống tài liệu linh tinh của tôi ở trên google driver thì tôi mới phát hiện ra cái slide của tôi ở trên 😀 .

Xdebug khác với debug thông thường như thế nào?

Khi bạn sử dụng error_log, var_dump hay print  bạn chỉ là outputing ra các biến xác định mà không thể làm nhiều hơn một số việc khác mà bạn cần. Ví dụ, trong khi bạn debug một đoạn code nào đó, bạn thêm một đoạn mã debug kiểu var_dump ra một biến nào đó chẳng hạn. Bạn lưu lại và bắt đầu tải lại trang đó trên trình duyệt để kiểm tra biến đó, hành động này cứ được lặp đi lặp lại cho đến khi bạn tìm ra nguyên nhân của nó. Với cách làm này ta nhìn thấy ngay nhược điểm đầu tiên là việc bạn mất quá nhiều thời gian cho việc tìm ra nguyên nhân gây bug. Không những thế nó còn không cho Coder hiểu sâu về lý do tại sao bug đó xảy ra.

Trong khi đó Xdebug cho bạn can thiệp vào đoạn code của bạn ngay trong quá trình thực thi và kiểm tra tất cả các biến trong một request. Điều này có nghĩa là bạn có thể nắm vững từng dòng code của mình đang chạy như thế nào hay các biến và giá trị của nó như thế nào qua từng dòng code. Do vậy Coder mất rất ít thời gian để giải quyết vấn đề và giúp cho quá trình làm việc của bạn trở lên hiệu quả hơn.

Debuging++ với Xdebug

Xdebug thực sự hữu ích khi bạn cố gắng debug một bug nào đó mà nguyên nhân không phải đến từ những đoạn code của bạn. Chúng ta thường làm một dự án với các thành viên khác chứ không phải là một mình chúng ta. Do thế các vấn đề, nguyên nhân phát sinh ra bug có thể đến bất kỳ đâu trong một dự án. Và bạn bắt đầu than rằng : “Làm thế quái nào mà tôi control được cả lỗi cho người khác được?”

Thế nhưng với  breakpoint của Xdebug cho phép bạn tạm dừng việc thực thi đoạn code của bạn bất cứ lúc nào, có nghĩa là nếu chức năng của bạn bị lỗi do một người khác gây ra bạn chỉ việc đặt các breakpoint của Xdebug  vào các đoạn code mà bạn cho rằng nó gây ra bug cho đến khi bạn nhận ra điều già đã làm nó sai. Để tiết kiệm thời gian hơn, bạn có thể dần dần di chuyển đến các breakpoint tiếp theo trong quá trình thực hiện cho đến khi nào bạn tiến gần hơn đến vấn đề tiềm ẩn thay vì phải chạy qua từng breakpoint  mà bạn biết chắc chắn nó không phải là nguyên nhân của bug.

Khi bạn bạn tìm ra vấn đề, bạn hoàn toàn có thể thay đổi giá trị của các biến ngay sau khi được gán. Do đó bạn có thể kiểm tra hay fix bug cho nguyên nhân gây ra bug ngay trong quá trình debug của mình.

Đến đây chắc rằng các bạn đã thấy được rằng Xdebug khá giống devtools khi debug với Javascript nhỉ. 😀 . Nhưng không, nó còn có một số tính năng khủng hơn nhé …!

Có lẽ bài viết này mình xin dừng ở việc giới thiệu Xdebug. Trong bài viết sau mình sẽ hướng dẫn các bạn cách cài đặt cũng như sử dụng Xdebug với PHP.

COMMENTS