1 puan yazan GN⁺ 2024-07-22 | 1 yorum | WhatsApp'ta paylaş
  • rr'ye giriş

    • rr, Linux üzerinde C/C++ için bir hata ayıklama aracıdır ve gdb'yi tamamlamayı amaçlar
    • Bir hatayı bir kez kaydedip, o kaydı tekrar tekrar hata ayıklayabilirsiniz
    • Her seferinde aynı yürütmeyi yeniden üreterek hata ayıklama yapılabilir
    • gdb aracılığıyla verimli tersine yürütme sağlar
  • rr özellikleri

    • Düşük ek yük
    • Çeşitli uygulamaların kaydedilmesini ve yeniden oynatılmasını destekler (Firefox, Chrome, QEMU, LibreOffice vb.)
    • Çok süreçli iş yüklerini kaydetme, yeniden oynatma ve hata ayıklama imkanı
    • gdb betikleme ve IDE entegrasyonu desteği
    • Dayanıklı ve sıkıştırılmış iz dosyaları, makineler arasında taşınabilir
    • Aralıklı hataları yeniden üretmek için kaos modu sunar
  • rr hata ayıklama deneyimi

    • Uygulamayı kaydetme: rr record /your/application --args...
    • Kaydedilmiş yürütmeyi hata ayıklama: rr replay
    • Kaydedilmiş izi deterministik olarak hata ayıklama
    • Genel gdb komutları kullanılabilir
    • Tersine yürütme ile sorun noktasına hızla gidilebilir
  • Video

    • Firefox kayıt ve yeniden oynatma demo videosu
    • rr'nin temel özelliklerini ayrıntılı olarak açıklayan video
    • Robert O'Callahan'ın ileri teknikler üzerine konuşma videosu
  • Başlarken

    • Kaynaktan derleme: paketler çalışmıyorsa önerilir
    • Fedora ve Ubuntu için kurulum yöntemleri sunuluyor
  • Arka plan ve motivasyon

    • Aralıklı başarısızlıkların hata ayıklanmasını kolaylaştırmak için geliştirildi
    • Deterministik yeniden oynatma sayesinde hata ayıklama sırasında elde edilen bilgiler geçerliliğini korur
    • Tersine yürütme, hata ayıklama sürecini kolaylaştırır
    • rr, birçok büyük ve küçük projede düzenli olarak kullanılır
  • rr nasıl çalışır

    • Linux kullanıcı alanı süreçlerini kaydeder ve çekirdekten gelen tüm girdileri yakalar
    • Yeniden oynatma sırasında komut düzeyinde denetim akışı, bellek ve yazmaç içeriklerini garanti eder
    • Bellek yerleşimi, nesne adresleri, yazmaç değerleri vb. aynı kalır
    • Fuzzer'lar ve rastgele hata enjeksiyon araçlarıyla birlikte kullanıldığında daha da güçlü hale gelir
  • rr'nin bağlamı

    • Kayıt ve yeniden oynatma ile hata ayıklama eski bir fikirdir
    • Firefox odaklı tasarım hedefleri
    • Dağıtılabilirlik: sıradan Linux çekirdeğinde çalışır, sistem yapılandırmasını değiştirmeyi gerektirmez
    • Düşük çalışma zamanı ek yükü
    • Basit tasarım: karmaşık tekniklerden kaçınır
  • Sınırlamalar

    • Tek çekirdekli bir makineyi taklit eder
    • Kayıt ağacının dışıyla bellek paylaşan süreçleri kaydedemez
    • Modern bir x86 CPU veya belirli ARM CPU'lar gerektirir
    • Kaydedilen sürecin yürüttüğü tüm sistem çağrıları hakkında bilgi gerektirir
    • Çekirdek değişikliklerine, sistem kütüphanesi güncellemelerine ve yeni CPU ailelerine uyum sağlanması gerekir
  • Ek kaynaklar

    • Genişletilmiş teknik rapor
    • rr wiki'si
    • Sorular için e-posta listesi veya chat.mozilla.org üzerindeki #rr kanalı kullanılabilir

GN⁺ özeti

  • rr, Linux'ta C/C++ hata ayıklaması için güçlü bir araçtır ve deterministik yeniden oynatma ile hata ayıklama verimliliğini büyük ölçüde artırır
  • Çeşitli uygulamaları ve çok süreçli iş yüklerini destekler; düşük ek yükü sayesinde pratiktir
  • Tersine yürütme özelliği hata ayıklama sürecini daha da kolaylaştırır
  • Firefox gibi karmaşık uygulamaları hata ayıklayabildiği için genel olarak kullanışlıdır
  • Benzer işlevlere sahip araçlar arasında gdb ve Valgrind bulunur

1 yorum

 
GN⁺ 2024-07-22
Hacker News yorumları
  • GDB zaten tersine hata ayıklama özelliği sunuyor
  • rr daha fazla özellik ve esneklik sağlıyor
  • rr kullanarak büyük bir kod tabanında tersine mühendislikte başarılı olunmuş
  • Hata ayıklayıcılar, sembol listesini ve sistem çağrılarını anlamayı gerektiriyor
  • rr'ın Rust, Zig, Odin ve Nim gibi dillerde de çalışıp çalışmadığı merak ediliyor
  • Python, JS ve C# gibi yönetilen bellek kullanan dillerde çalışmayacaktır
  • Rust'a taşımayı deneyen bir proje vardı ancak durduruldu
  • C++'tan Rust'a yeniden yazımın etkisi ve faydaları üzerine karşılaştırmalı bir çalışma ilginç olurdu
  • rr çok faydalı, ancak eşzamanlılık hatalarını çoğu zaman yeniden üretemiyor
  • Bazı diller rr'ı doğrudan araçlarına entegre etse çok faydalı olurdu
  • rr ile C/C++ hata ayıklama çok güçlü ve hata ayıklama sürecini büyük ölçüde iyileştiriyor
  • Pernosco, rr üzerine inşa edilerek tüm program çalıştırmasının sorgulanabilir bir veritabanını ekliyor
    • Yanlış bir değere tıklayınca, o değerin nereden geldiğini anında açıklıyor
    • Kodu anlamadan, hata ayıklayıcıya gerçekte ne olduğunu sorabiliyorsunuz
  • C/C++ kodu Python'dan çağrılan bir dll/so olarak derlenmiş olsa bile bunun kullanılıp kullanılamayacağı merak ediliyor
  • rr'ın Ryzen CPU ile ilgili sorunlarının çözülüp çözülmediği merak ediliyor