1 poin oleh GN⁺ 2024-07-22 | 1 komentar | Bagikan ke WhatsApp
  • Pengenalan rr

    • rr adalah alat debugging C/C++ di Linux, ditujukan untuk melengkapi gdb
    • Kegagalan dapat direkam satu kali lalu di-debug berulang kali dari rekaman tersebut
    • Debugging dimungkinkan dengan mereproduksi eksekusi yang sama setiap saat
    • Menyediakan eksekusi mundur yang efisien melalui gdb
  • Fitur rr

    • Overhead rendah
    • Mendukung perekaman dan pemutaran ulang berbagai aplikasi (Firefox, Chrome, QEMU, LibreOffice, dll.)
    • Dapat merekam, memutar ulang, dan men-debug beban kerja multiproses
    • Mendukung scripting gdb dan integrasi IDE
    • File jejak yang tahan lama dan terkompresi, dapat dipindahkan antar mesin
    • Menyediakan mode chaos untuk mereproduksi bug intermiten
  • Pengalaman debugging rr

    • Merekam aplikasi: rr record /your/application --args...
    • Men-debug eksekusi yang direkam: rr replay
    • Men-debug jejak yang direkam secara deterministik
    • Dapat menggunakan perintah gdb biasa
    • Dapat dengan cepat berpindah ke titik masalah melalui eksekusi mundur
  • Video

    • Video demo perekaman dan pemutaran ulang Firefox
    • Video yang menjelaskan fitur dasar rr secara rinci
    • Video kuliah teknis lanjutan oleh Robert O'Callahan
  • Memulai

    • Build dari source: direkomendasikan jika paket tidak berfungsi
    • Menyediakan cara instalasi di Fedora dan Ubuntu
  • Latar belakang dan motivasi

    • Dikembangkan untuk mempermudah debugging kegagalan intermiten
    • Melalui pemutaran ulang deterministik, informasi yang diperoleh selama proses debugging tetap valid
    • Eksekusi mundur membuat proses debugging menjadi lebih mudah
    • rr digunakan secara rutin di banyak proyek besar maupun kecil
  • Cara kerja rr

    • Merekam proses ruang pengguna Linux dan menangkap semua input dari kernel
    • Saat pemutaran ulang, menjamin alur kontrol tingkat instruksi, memori, dan isi register
    • Tata letak memori, alamat objek, nilai register, dan sebagainya tetap sama
    • Menjadi lebih kuat saat digunakan bersama fuzzer dan injector fault acak
  • Konteks rr

    • Debugging rekam dan putar ulang adalah gagasan lama
    • Tujuan desain yang berfokus pada Firefox
    • Kemudahan distribusi: berjalan di kernel Linux biasa, tanpa perlu mengubah konfigurasi sistem
    • Overhead runtime rendah
    • Desain sederhana: menghindari teknik yang rumit
  • Keterbatasan

    • Mengemulasi mesin single-core
    • Tidak dapat merekam proses yang berbagi memori dengan pihak di luar pohon perekaman
    • Memerlukan CPU x86 modern atau CPU ARM tertentu
    • Perlu mengetahui semua system call yang dijalankan oleh proses yang direkam
    • Perlu menyesuaikan diri dengan perubahan kernel, pembaruan pustaka sistem, dan keluarga CPU baru
  • Referensi tambahan

    • Laporan teknis yang diperluas
    • Wiki rr
    • Dapat mengajukan pertanyaan melalui mailing list atau di #rr pada chat.mozilla.org

Ringkasan GN⁺

  • rr adalah alat yang kuat untuk debugging C/C++ di Linux, yang sangat meningkatkan efisiensi debugging melalui pemutaran ulang deterministik
  • Mendukung berbagai aplikasi dan beban kerja multiproses, serta praktis berkat overhead yang rendah
  • Fitur eksekusi mundur membuat proses debugging menjadi lebih mudah
  • Dapat men-debug aplikasi kompleks seperti Firefox sehingga berguna secara umum
  • Alat dengan fungsi serupa antara lain gdb dan Valgrind

1 komentar

 
GN⁺ 2024-07-22
Komentar Hacker News
  • GDB sudah menyediakan fitur reverse debugging
  • rr menawarkan lebih banyak fitur dan fleksibilitas
  • Berhasil menggunakan rr untuk merekayasa balik codebase besar
  • Debugger memerlukan daftar simbol dan pemahaman tentang system call
  • Penasaran apakah rr juga bekerja pada bahasa seperti Rust, Zig, Odin, dan Nim
  • Kemungkinan tidak akan bekerja pada bahasa dengan managed memory seperti Python, JS, dan C#
  • Pernah ada proyek yang mencoba melakukan port ke Rust, tetapi dihentikan
  • Studi perbandingan tentang dampak dan manfaat penulisan ulang dari C++ ke Rust akan menarik
  • rr sangat berguna, tetapi sering kali tidak dapat mereproduksi bug konkurensi
  • Akan sangat berguna jika beberapa bahasa mengintegrasikan rr langsung ke dalam tool mereka
  • Debugging C/C++ dengan rr sangat kuat dan sangat meningkatkan proses debugging
  • Pernosco dibangun di atas rr dan menambahkan database yang bisa di-query untuk seluruh eksekusi program
    • Jika mengklik nilai yang salah, alat itu langsung menjelaskan dari mana nilai tersebut berasal
    • Anda bisa bertanya kepada debugger apa yang sebenarnya terjadi tanpa perlu memahami kodenya
  • Penasaran apakah ini juga bisa digunakan ketika kode C/C++ dikompilasi sebagai dll/so yang dipanggil dari Python
  • Penasaran apakah masalah rr terkait CPU Ryzen sudah teratasi