1 điểm bởi GN⁺ 2024-07-22 | 1 bình luận | Chia sẻ qua WhatsApp
  • 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

 
GN⁺ 2024-07-22
Ý kiến trên Hacker News
  • GDB đã cung cấp sẵn tính năng gỡ lỗi ngược
  • rr cung cấp nhiều tính năng và độ linh hoạt hơn
  • Đã thành công khi dùng rr để đảo ngược kỹ thuật các codebase lớn
  • Trình gỡ lỗi cần danh sách symbol và hiểu biết về system call
  • Thắc mắc liệu rr có hoạt động với các ngôn ngữ như Rust, Zig, Odin và Nim hay không
  • Có lẽ sẽ không hoạt động với các ngôn ngữ quản lý bộ nhớ như Python, JS và C#
  • Từng có một dự án thử port sang Rust nhưng đã bị dừng lại
  • Sẽ rất thú vị nếu có một nghiên cứu so sánh về tác động và lợi ích của việc viết lại từ C++ sang Rust
  • rr rất hữu ích nhưng thường không tái hiện được lỗi đồng thời
  • Sẽ rất hữu ích nếu một số ngôn ngữ tích hợp rr trực tiếp vào công cụ của họ
  • Gỡ lỗi C/C++ bằng rr rất mạnh mẽ và cải thiện đáng kể quy trình gỡ lỗi
  • Pernosco được xây dựng dựa trên rr và bổ sung một cơ sở dữ liệu có thể truy vấn của toàn bộ quá trình thực thi chương trình
    • Nhấp vào một giá trị sai và nó sẽ lập tức giải thích giá trị đó đến từ đâu
    • Bạn có thể hỏi trình gỡ lỗi điều gì thực sự đã xảy ra mà không cần hiểu mã
  • Thắc mắc liệu có thể dùng nó ngay cả khi mã C/C++ được biên dịch thành dll/so được Python gọi hay không
  • Thắc mắc liệu các vấn đề của rr liên quan đến CPU Ryzen đã được giải quyết hay chưa