Theo Dõi Và Gỡ Lỗi Chương Trình Lua - nói dối e blog

Theo Dõi Và Gỡ Lỗi Chương Trình Lua

Theo dõi và gỡ lỗi chương trình Lua
Chúng tôi sử dụng Lua làm ngôn ngữ phát triển chính cho các dự án, và không ít đồng nghiệp từng mong muốn được hỗ trợ theo dõi từng bước gỡ lỗi mã Lua ngay trong IDE. Tuy nhiên tôi luôn cho rằng thói quen này phần nào bị ảnh hưởng tiêu cực từ cách làm việc của Windows. Thực tế cách đây nhiều năm, tôi từng thử xây dựng một công cụ gỡ lỗi giao diện đồ họa nhưng sau đó dự án bị bỏ dở. Lý do là bởi tôi nhận thấy công cụ kiểu này không mang lại nhiều giá trị thực tế - những lập trình viên cần đến việc gỡ lỗi từng bước như vậy thường không viết được mã Lua chất lượng cao. Thay vì cung cấp công cụ hỗ trợ thói quen không tốt đó, tôi cho rằng nên tập trung nâng cao chất lượng code gốc.

Hai năm sau khi tôi đang công tác tại NetEase, lại có người đề xuất cần một công cụ gỡ lỗi tiện dụng hơn. Lần này tôi đã phát triển một trình gỡ lỗi kết nối từ xa với giao diện kiểu gdb, hoạt động theo mô hình client-server, đồng thời tích hợp thêm giao diện đồ họa nhờ thư viện GTK. Công cụ này cho phép thiết lập điểm dừng từ xa và theo dõi giá trị biến trong quá trình chạy chương trình. Những bạn quan tâm có thể tham khảo bài viết chi tiết về dự án này.

Tuy nhiên khi đề tài này được nhắc lại gần đây, tôi bắt đầu thay đổi góc nhìn. Thay vì tập trung phát triển công cụ gỡ lỗi tương tác phức tạp, tôi thấy hướng tiếp cận sử dụng hệ thống log theo dõi thực tế lại hiệu quả hơn nhiều, đặc biệt trong môi trường sản phẩm thực tế nơi hiếm khi có cơ hội dừng dịch vụ để debug từng bước.

Chỉ cần thiết lập hệ thống log để ghi nhận quá trình thực thi các hàm quan trọng cùng sự thay đổi của biến liên quan, chúng ta hoàn toàn có thể phát hiện các lỗi tiềm ẩn. Nếu định dạng log đủ chuẩn hóa, việc phát triển một công cụ GUI độc lập đi kèm trình soạn thảo mã để tái hiện quy trình chạy chương trình cũng trở nên đơn giản hơn nhiều.

Tôi đã dành khoảng hai giờ đồng hồ để xây dựng một công cụ theo dõi đơn giản, công cụ này có khả năng ghi lại toàn bộ quá trình thực thi của hàm đang được gọi trace. Khi hàm đó trả về kết quả, hook debug sẽ tự động được hủy bỏ. Với chút công sức bổ sung, công cụ hoàn toàn có thể mở rộng khả năng theo dõi các biến phức tạp như foo.bar thông qua việc hỗ trợ truy cập bảng dữ liệu. Tuy nhiên vì thấy tính ứng dụng không cao nên tôi chưa phát triển thêm.

Bạn nào quan tâm có thể truy cập kho lưu trữ GitHub để tham khảo mã nguồn dự án này.

0%