1 पॉइंट द्वारा GN⁺ 2024-07-22 | 1 टिप्पणियां | WhatsApp पर शेयर करें
  • rr परिचय

    • rr Linux पर C/C++ के लिए एक डिबगिंग टूल है, जिसका उद्देश्य gdb को पूरक बनाना है
    • किसी विफलता को एक बार रिकॉर्ड करके उसके रिकॉर्ड को बार-बार डिबग किया जा सकता है
    • हर बार उसी execution को दोहराकर डिबग करना संभव है
    • gdb के माध्यम से कुशल reverse execution प्रदान करता है
  • rr की विशेषताएँ

    • कम overhead
    • विभिन्न applications के रिकॉर्ड और रीप्ले का समर्थन (Firefox, Chrome, QEMU, LibreOffice आदि)
    • multi-process workloads को रिकॉर्ड, रीप्ले और डिबग किया जा सकता है
    • gdb scripting और IDE integration का समर्थन
    • टिकाऊ और compressed trace files, जिन्हें machines के बीच ले जाया जा सकता है
    • intermittent bugs को पुन: उत्पन्न करने के लिए chaos mode उपलब्ध
  • rr डिबगिंग अनुभव

    • application रिकॉर्ड करें: rr record /your/application --args...
    • रिकॉर्ड किए गए execution को डिबग करें: rr replay
    • रिकॉर्ड किए गए trace को deterministic तरीके से डिबग करें
    • सामान्य gdb commands का उपयोग किया जा सकता है
    • reverse execution के जरिए जल्दी से समस्या वाले बिंदु तक पहुँचा जा सकता है
  • वीडियो

    • Firefox रिकॉर्ड और रीप्ले डेमो वीडियो
    • rr की बुनियादी विशेषताओं को विस्तार से समझाने वाला वीडियो
    • Robert O'Callahan का उन्नत तकनीकी व्याख्यान वीडियो
  • शुरुआत

    • source से build करें: अगर packages काम न करें तो इसकी सिफारिश की जाती है
    • Fedora और Ubuntu पर installation के तरीके दिए गए हैं
  • पृष्ठभूमि और प्रेरणा

    • intermittent failures की डिबगिंग को आसान बनाने के लिए विकसित किया गया
    • deterministic replay के कारण डिबगिंग प्रक्रिया में मिली जानकारी वैध बनी रहती है
    • reverse execution की वजह से डिबगिंग प्रक्रिया और आसान हो जाती है
    • rr का नियमित उपयोग कई बड़े और छोटे projects में किया जाता है
  • rr कैसे काम करता है

    • Linux user-space processes को रिकॉर्ड करता है और kernel से आने वाले सभी inputs को कैप्चर करता है
    • रीप्ले के दौरान instruction-level control flow, memory और register contents की गारंटी देता है
    • memory layout, object addresses, register values आदि समान बने रहते हैं
    • fuzzer और random fault injectors के साथ उपयोग करने पर यह और शक्तिशाली हो जाता है
  • rr का संदर्भ

    • रिकॉर्ड और रीप्ले डिबगिंग एक पुराना विचार है
    • Firefox पर केंद्रित design goals
    • deployability: सामान्य Linux kernel पर चलता है, system configuration बदलने की आवश्यकता नहीं
    • कम runtime overhead
    • सरल design: जटिल तकनीकों से बचाव
  • सीमाएँ

    • single-core machine को emulate करता है
    • record tree के बाहर memory साझा करने वाली processes को रिकॉर्ड नहीं किया जा सकता
    • आधुनिक x86 CPU या कुछ विशेष ARM CPU की आवश्यकता होती है
    • रिकॉर्ड की गई process द्वारा चलाए जाने वाले सभी system calls की जानकारी आवश्यक है
    • kernel changes, system library updates, और नई CPU families के अनुसार अनुकूलन की आवश्यकता होती है
  • अतिरिक्त संदर्भ सामग्री

    • विस्तृत technical report
    • rr wiki
    • mailing list या chat.mozilla.org के #rr में प्रश्न पूछे जा सकते हैं

GN⁺ का सार

  • rr Linux पर C/C++ डिबगिंग के लिए एक शक्तिशाली टूल है, जो deterministic replay के जरिए डिबगिंग दक्षता को काफी बेहतर बनाता है
  • यह विभिन्न applications और multi-process workloads का समर्थन करता है, और कम overhead के साथ व्यावहारिक है
  • reverse execution फीचर डिबगिंग प्रक्रिया को और आसान बनाता है
  • यह Firefox जैसे जटिल applications को डिबग कर सकता है, इसलिए सामान्य रूप से भी उपयोगी है
  • समान कार्यक्षमता वाले टूल्स में gdb और Valgrind शामिल हैं

1 टिप्पणियां

 
GN⁺ 2024-07-22
Hacker News टिप्पणियाँ
  • GDB पहले से ही reverse debugging फीचर प्रदान करता है
  • rr अधिक फीचर्स और flexibility प्रदान करता है
  • rr का उपयोग करके बड़े codebase का reverse engineering करने में सफलता मिली थी
  • debugger के लिए symbol list और system call की समझ आवश्यक होती है
  • जिज्ञासा है कि rr Rust, Zig, Odin, Nim जैसी भाषाओं में भी काम करता है या नहीं
  • Python, JS, C# जैसी managed memory भाषाओं में यह शायद काम नहीं करेगा
  • इसे Rust में port करने की कोशिश करने वाला एक प्रोजेक्ट था, लेकिन उसे बंद कर दिया गया था
  • C++ से Rust में rewrite के प्रभाव और फायदों पर comparative study दिलचस्प होगी
  • rr बहुत उपयोगी है, लेकिन अक्सर concurrency bugs को reproduce नहीं कर पाता
  • अगर कुछ भाषाएँ rr को सीधे अपने tools में integrate करें, तो यह बहुत उपयोगी होगा
  • rr का उपयोग करके C/C++ debugging बहुत शक्तिशाली है और debugging प्रक्रिया को काफी बेहतर बनाता है
  • Pernosco rr पर आधारित है और पूरे program execution का queryable database जोड़ता है
    • किसी गलत value पर क्लिक करने पर यह तुरंत समझा देता है कि वह value कहाँ से आई
    • code को समझे बिना debugger से पूछा जा सकता है कि वास्तव में क्या हुआ था
  • जिज्ञासा है कि क्या इसे तब भी उपयोग किया जा सकता है जब C/C++ code को Python से कॉल होने वाले dll/so के रूप में compile किया गया हो
  • जिज्ञासा है कि rr की Ryzen CPU से जुड़ी समस्याएँ हल हो गई हैं या नहीं