-
Giới thiệu về rr
- rr là công cụ gỡ lỗi C/C++ trên Linux, nhằm bổ trợ cho gdb
- Có thể ghi lại một lần thất bại và gỡ lỗi lặp đi lặp lại trên bản ghi đó
- Có thể gỡ lỗi bằng cách tái hiện cùng một lần thực thi ở mỗi lần chạy
- Cung cấp thực thi ngược hiệu quả thông qua gdb
-
Tính năng của rr
- Overhead thấp
- Hỗ trợ ghi lại và phát lại nhiều ứng dụng khác nhau (Firefox, Chrome, QEMU, LibreOffice, v.v.)
- Có thể ghi lại, phát lại và gỡ lỗi khối lượng công việc đa tiến trình
- Hỗ trợ scripting gdb và tích hợp IDE
- Tệp trace bền vững và được nén, có thể di chuyển giữa các máy
- Cung cấp chế độ hỗn loạn để tái hiện lỗi xảy ra gián đoạn
-
Trải nghiệm gỡ lỗi với rr
- Ghi lại ứng dụng:
rr record /your/application --args...
- Gỡ lỗi lần thực thi đã ghi:
rr replay
- Gỡ lỗi trace đã ghi theo cách tất định
- Có thể dùng các lệnh gdb thông thường
- Có thể nhanh chóng di chuyển tới điểm xảy ra vấn đề bằng thực thi ngược
-
Video
- Video demo ghi và phát lại Firefox
- Video giải thích chi tiết các tính năng cơ bản của rr
- Video bài nói chuyện kỹ thuật nâng cao của Robert O'Callahan
-
Bắt đầu
- Build từ mã nguồn: được khuyến nghị nếu gói cài đặt không hoạt động
- Cung cấp cách cài đặt trên Fedora và Ubuntu
-
Bối cảnh và động lực
- Được phát triển để giúp việc gỡ lỗi các lỗi thất bại gián đoạn trở nên dễ dàng hơn
- Nhờ phát lại tất định, thông tin thu được trong quá trình gỡ lỗi vẫn giữ nguyên giá trị
- Thực thi ngược giúp quá trình gỡ lỗi trở nên dễ dàng hơn
- rr được sử dụng thường xuyên trong nhiều dự án lớn và nhỏ
-
rr hoạt động như thế nào
- Ghi lại các tiến trình không gian người dùng Linux và thu thập mọi đầu vào từ kernel
- Khi phát lại, bảo đảm luồng điều khiển ở mức lệnh, bộ nhớ và nội dung thanh ghi
- Bố cục bộ nhớ, địa chỉ đối tượng, giá trị thanh ghi, v.v. được giữ nguyên
- Trở nên mạnh mẽ hơn nữa khi dùng cùng fuzzer và trình tiêm lỗi ngẫu nhiên
-
Bối cảnh của rr
- Gỡ lỗi ghi và phát lại là một ý tưởng đã có từ lâu
- Mục tiêu thiết kế tập trung vào Firefox
- Khả năng triển khai: chạy trên kernel Linux thông thường, không cần thay đổi cấu hình hệ thống
- Overhead khi chạy thấp
- Thiết kế đơn giản: tránh các kỹ thuật phức tạp
-
Hạn chế
- Mô phỏng máy đơn lõi
- Không thể ghi lại các tiến trình chia sẻ bộ nhớ với bên ngoài cây tiến trình được ghi
- Cần CPU x86 hiện đại hoặc một số CPU ARM nhất định
- Cần hiểu biết về mọi system call mà tiến trình được ghi thực thi
- Cần thích ứng với thay đổi kernel, cập nhật thư viện hệ thống và các họ CPU mới
-
Tài liệu tham khảo bổ sung
- Báo cáo kỹ thuật mở rộng
- Wiki rr
- Có thể đặt câu hỏi qua mailing list hoặc tại #rr trên chat.mozilla.org
Tóm tắt của GN⁺
- rr là một công cụ mạnh mẽ để gỡ lỗi C/C++ trên Linux, giúp cải thiện đáng kể hiệu quả gỡ lỗi thông qua phát lại tất định
- Hỗ trợ nhiều ứng dụng và khối lượng công việc đa tiến trình, đồng thời thực tế nhờ overhead thấp
- Tính năng thực thi ngược giúp quá trình gỡ lỗi trở nên dễ dàng hơn
- Có thể gỡ lỗi các ứng dụng phức tạp như Firefox nên nhìn chung rất hữu ích
- Các công cụ có chức năng tương tự gồm gdb và Valgrind
1 bình luận
Ý kiến trên Hacker News