Trong thế giới công cụ phát triển Linux, việc gỡ lỗi từ lâu đã bị thống trị bởi GDB và LLDB - những công cụ mạnh mẽ nhưng thường bị chỉ trích về trải nghiệm người dùng. Một đối thủ mới đã xuất hiện trong lĩnh vực này: 'nnd', một trình gỡ lỗi được xây dựng từ đầu với lời hứa cải thiện tốc độ và khả năng sử dụng so với các tùy chọn truyền thống.
Cách tiếp cận mới cho việc gỡ lỗi trên Linux
Trình gỡ lỗi mới 'nnd' lấy cảm hứng từ RemedyBG nhưng tạo ra con đường riêng của mình như một trình gỡ lỗi giao diện người dùng dòng lệnh (TUI) cho Linux. Điều làm nó nổi bật là sự tập trung vào tốc độ và khả năng phản hồi - một điểm đau thường gặp với các công cụ hiện có. Không giống như GDB hoặc LLDB, 'nnd' được triển khai hầu như từ đầu, cho phép nó tối ưu hóa hiệu suất ngay cả khi làm việc với các tệp thực thi lớn như ClickHouse 2,5 GB mà nhà phát triển đã thử nghiệm.
Phản hồi từ cộng đồng nhấn mạnh cách công cụ này giải quyết những nỗi thất vọng kéo dài với quy trình gỡ lỗi. Một trong những tính năng được đánh giá cao nhất là việc triển khai thanh tiến trình và các hoạt động bất đồng bộ cho các tác vụ thường khiến trình gỡ lỗi bị đóng băng hoặc treo.
Tôi ước điều này phổ biến hơn, đặc biệt là tính năng thanh tiến trình.
Quan điểm này đồng cảm với nhiều nhà phát triển đã trải qua sự thất vọng khi chờ đợi các ký hiệu gỡ lỗi được tải mà không có dấu hiệu tiến trình nào. Một người bình luận khác đề cập rằng công việc trước đây của họ liên quan đến việc mở khoảng 200 plugin DLL khi khởi động, điều này sẽ làm treo hoàn toàn GDB trong quá trình lập chỉ mục ký hiệu DWARF.
Bộ tính năng giới hạn nhưng tập trung
Mặc dù 'nnd' cho thấy tiềm năng, nó đi kèm với những hạn chế rõ ràng. Hiện tại nó chỉ hỗ trợ Linux trên kiến trúc x86 64-bit và làm việc độc quyền với mã gốc như C++ hoặc Rust (không phải ngôn ngữ thông dịch như Java hoặc Python). Trình gỡ lỗi cũng thiếu khả năng gỡ lỗi từ xa (mặc dù nó hoạt động qua SSH), không theo dõi các quy trình được phân nhánh, và không có chức năng ghi/phát lại.
Mặc dù có những hạn chế này, cách tiếp cận tập trung dường như đang chiến thắng người hâm mộ. Một số người bình luận đã so sánh với các công cụ cũ hơn mà họ nhớ, với một người lưu ý rằng nó nhắc họ nhớ đến CodeView mà Tôi đã ước có thể quay lại kể từ đó, và không, một đống lớn các plugin Emacs hoặc vim không phải là tương đương.
Các tính năng chính của trình gỡ lỗi nnd
- Giao diện người dùng đầu cuối (TUI) nhanh và phản hồi tốt
- Không dựa trên GDB hoặc LLDB, được phát triển chủ yếu từ đầu
- Hoạt động tốt với các tệp thực thi lớn (đã thử nghiệm trên ClickHouse 2,5 GB)
- Các thao tác bất đồng bộ với thanh tiến trình
- Được phân phối dưới dạng một tệp thực thi duy nhất 6 MB không có phụ thuộc
Hạn chế hiện tại
- Chỉ hỗ trợ Linux
- Chỉ hỗ trợ kiến trúc x86-64
- Chỉ hỗ trợ mã máy (C++, Rust, v.v.)
- Chỉ có giao diện TUI (không có REPL hoặc GUI)
- Không hỗ trợ gỡ lỗi từ xa (hoạt động qua SSH)
- Chỉ một tiến trình (không theo dõi các tiến trình con)
- Không có chức năng ghi/phát lại
Tình trạng của các công cụ gỡ lỗi
Sự xuất hiện của 'nnd' nhấn mạnh một cuộc trò chuyện rộng lớn hơn về tình trạng của các công cụ gỡ lỗi trên các nền tảng. Các bình luận tiết lộ một điểm đau đặc biệt cho người dùng macOS, với một người than thở hạn hán macOS tiếp tục liên quan đến các công cụ gỡ lỗi chất lượng. Những người khác đề cập đến việc mong đợi phiên bản Linux được hứa hẹn của RAD Debugger, cho thấy một nhu cầu chung cho trải nghiệm gỡ lỗi tốt hơn.
Đối với các nhà phát triển quan tâm đến các lựa chọn thay thế, cuộc thảo luận cộng đồng chỉ ra một số tùy chọn như pwndbg (thêm các cải tiến chất lượng cuộc sống cho GDB/LLDB) và cgdb (một TUI GDB dựa trên ncurses với các ràng buộc vim).
Tệp thực thi độc lập 6 MB không có phụ thuộc làm cho 'nnd' đặc biệt hấp dẫn đối với những người muốn nhanh chóng thử một cách tiếp cận gỡ lỗi mới mà không cần thiết lập phức tạp. Mặc dù vẫn đang trong giai đoạn phát triển tích cực với các tính năng thiết yếu được triển khai, người tạo lưu ý rằng họ sử dụng nó hàng ngày và thấy nó rất hữu ích, mặc dù nó chưa được thử nghiệm rộng rãi trên các môi trường khác nhau.
Khi các công cụ phát triển tiếp tục phát triển, 'nnd' đại diện cho một nỗ lực tập trung để cải thiện một phần quan trọng trong quy trình làm việc của lập trình viên mà đã thấy tương đối ít đổi mới so với các lĩnh vực như hệ thống xây dựng và trình soạn thảo.
Tham khảo: al13n321/nnd