1 điểm bởi GN⁺ 2024-11-28 | 1 bình luận | Chia sẻ qua WhatsApp
  • Ứng dụng của C-Reduce

    • C-Reduce là công cụ do Regehr và các cộng sự phát triển, được dùng để tối giản trình tái hiện lỗi của trình biên dịch C.
    • Ví dụ, nó hữu ích khi bạn muốn rút gọn một tệp C dài 10.000 dòng gây ra lỗi trong Clang.
    • C-Reduce không chỉ giới hạn ở ngôn ngữ C mà còn có thể áp dụng cho nhiều ngôn ngữ khác nhau.
  • Yêu cầu của C-Reduce

    • Cần có điều kiện mang tính quyết định.
    • Nếu có trình tái hiện nhanh thì sẽ giúp tăng tốc độ rút gọn.
    • Cần có một hoặc nhiều tệp mã nguồn có thể thay đổi mà C-Reduce có thể rút gọn.
  • Trường hợp lỗi RustPython

    • Để báo cáo lỗi xảy ra trong RustPython, tác giả đã viết script interesting.sh.
    • Script này chạy RustPython rồi dùng grep để tìm thông báo lỗi cụ thể.
  • Chạy C-Reduce

    • Chạy C-Reduce và đã thành công trong việc giảm kích thước tệp hơn 50%.
    • Dùng tùy chọn --not-c để tránh các pass chuyên biệt cho C và tối ưu cho Python.
    • Kết quả là có thể rút gọn tệp nhanh chóng và dễ dàng.
  • Kết luận

    • C-Reduce có thể áp dụng cho nhiều ngôn ngữ khác nhau và rất hữu ích để rút gọn tệp một cách nhanh chóng, hiệu quả.
    • Đây là một blog mã nguồn mở, nếu có lỗi thì có thể đề xuất chỉnh sửa.

1 bình luận

 
GN⁺ 2024-11-28
Ý kiến trên Hacker News
  • Một người dùng chia sẻ cách rút gọn tệp và giải thích cách thiết lập bằng RustPython và scrapscript

    • Dùng lệnh git clone để clone RustPython và scrapscript, rồi build bằng cargo build --release
    • Tải xuống tệp interesting.sh và cấp quyền thực thi cho nó
    • Dùng lệnh nix run nixpkgs#creduce để rút gọn tệp
  • Khuyên dùng C-Reduce, đồng thời gợi ý thử thêm công cụ Shrinkray

    • Shrinkray độc lập với định dạng và vẫn hữu ích ngay cả khi C-Reduce không hoạt động tốt
  • Đề cập rằng bài báo về C-Reduce đã được công bố vào năm 2012

    • Bài báo của John Regehr và cộng sự giải thích cách C-Reduce hoạt động
  • Lần đầu biết đến C-Reduce và thấy hứng thú giống như khi lần đầu phát hiện ra git bisect

    • Quyết định sẽ ghi nhớ để dùng khi cần sau này
  • Tìm thấy một bài viết cho thấy ví dụ về C-Reduce, nhưng khó hiểu cách nó quyết định loại bỏ thứ gì ở mỗi vòng lặp

    • Đoán rằng có một quá trình token hóa, nhưng khó hiểu cách nó hoạt động giữa các ngôn ngữ lập trình khác nhau
  • Đánh giá C-Reduce là cực kỳ hữu ích

    • Dùng CSmith để tạo các chương trình kiểm thử ngẫu nhiên, và khi bị crash thì tự động dùng C-Reduce để thu gọn vấn đề
  • Delta debugging không phải là một khái niệm mới

    • Một hiện thực delta debugging tên là "delta" đã có tuổi đời hơn 19 năm và được phát hành mã nguồn mở
    • Trong phần giới thiệu LLVM, nó được nhắc đến như một công cụ delta debugging tiêu chuẩn
  • Nó cũng hoạt động tốt với SQL và đang được dùng ở nơi làm việc

    • Biết đến nó thông qua SQLancer
  • Khó tin rằng nó hoạt động được với cả những ngôn ngữ ngoài C nếu không có lời giải thích vì sao

    • Việc nó không dùng LLM lại càng khiến điều đó khó hiểu hơn
  • Đề xuất cvise như một công cụ kế nhiệm tốt của C-Reduce

    • Đã nhiều lần dùng nó để rút gọn các chương trình assembly xuống tập tối thiểu, và đó là một chương trình rất hữu ích