HN पर साझा: 17 साल की उम्र में 6 महीने C debugger बनाने में लगाने वाला किशोर
(github.com/d4ckard)Spray debugger का परिचय
- Spray, C code के लिए एक सरल और समझने में आसान debugger है.
- यह चल रहे program के execution को control करने और उसकी state की जाँच व संशोधन करने की सुविधा देता है.
- इसे debugger के अंदरूनी कामकाज के प्रति जिज्ञासा और debugging को अधिक सुलभ बनाने के तरीकों की खोज के उद्देश्य से विकसित करना शुरू किया गया.
मुख्य सुविधाएँ
- function, file के भीतर line, और address पर breakpoint सेट करना.
- variable, memory address, और register के मान को print और set करना.
- C syntax highlighting, backtrace, और step-by-step execution.
- command output format तय करने के लिए filter सुविधा.
विकास roadmap
- जटिल struct का print और संशोधन.
- जटिल struct के लिए syntax highlighting.
- frame pointer के बजाय DWARF-आधारित backtrace.
- inline function, external library loading, और debug किए जा रहे program को भेजे गए signal को catch करना.
इंस्टॉल करने का तरीका
- Spray frontend का एक हिस्सा Scheme में लिखा गया है और CHICKEN Scheme के जरिए C में compile किया जाता है.
- CHICKEN इंस्टॉल होना चाहिए, और libdwarf पर dependency होने के कारण उसे पहले इंस्टॉल करना होगा.
- repository को clone करें और
makecommand से Spray इंस्टॉल करें. - इसे
$PATHमें जोड़कर सामान्य command की तरह इस्तेमाल किया जा सकता है.
Spray का उपयोग
- जिस binary को debug करना है उसमें debug information enabled होनी चाहिए और optimization disabled होना चाहिए.
- program को compile करने के लिए Clang का उपयोग करना होगा.
- पहले argument के रूप में debug की जाने वाली binary का नाम दें, और उसके बाद के arguments में debug किए जाने वाले program के arguments पास करें.
commands
value पढ़ना और लिखना
- variable, register, और address के मान को print या set करें.
- register नामों में AT&T assembly syntax के अनुसार
%prefix इस्तेमाल होता है. - मानों को decimal या hexadecimal में दिया जा सकता है.
breakpoint
- function, file के भीतर line, और address पर breakpoint सेट और delete करें.
continuecommand से अगले breakpoint तक execution जारी रखें.
step execution
- अगली line पर जाएँ, function के अंदर जाएँ, या वर्तमान function से बाहर निकलें.
- अगले instruction पर जाएँ, और वर्तमान स्थान से backtrace print करें.
filter
- output format बदलने के लिए filter का उपयोग किया जा सकता है.
printऔरsetcommand के बाद filter जोड़कर output format बदला जा सकता है.
योगदान कैसे करें
- सभी योगदानों का स्वागत है; pull request भेजने से पहले local test suite चलाकर यह जाँचें कि functionality टूटी तो नहीं है.
- कुछ खास मानों पर off-by-one error के कारण होने वाली test failure को नज़रअंदाज़ किया जा सकता है.
संदर्भ सामग्री
- Sy Brand की blog series "Writing a Linux Debugger", DWARF 5 standard, libdwarf documentation, और Eli Bendersky की "How debuggers work" post.
GN⁺ की राय
इस लेख की सबसे महत्वपूर्ण बात यह है कि Spray, C code के लिए एक user-friendly debugger है और इसका फोकस debugging को अधिक सुलभ बनाना है. शुरुआती software engineer भी आसानी से समझ सकें, ऐसी संरचना और commands देकर यह जटिल debugging कार्यों को आसान बनाने में मदद करता है. साथ ही, development roadmap और contribution process भी स्पष्ट रूप से दिए गए हैं, जिससे open source project में भाग लेना चाहने वाले developers के लिए यह एक दिलचस्प अवसर बनता है.
1 टिप्पणियां
Hacker News राय
किशोर प्रोग्रामर का कोड खास तौर पर साफ, सुसंगत और अच्छी तरह मॉड्यूलराइज़्ड है। इस तरह के प्रोजेक्ट के लिए binary format और kernel API की असामान्य जानकारी चाहिए होती है। कई "उन्नत" प्रोग्रामर भी conceptual स्तर पर ऐसा कुछ बनाने में कठिनाई महसूस कर सकते हैं।
युवा प्रोग्रामरों का कोड पढ़ना दिलचस्प होता है। अनुभव कम होता है, लेकिन फिर भी काफ़ी ऊँचे स्तर की समझ के साथ design करते हुए देखा जा सकता है। लेखक तेज़ी से सीखता हुआ लगता है, और 6 महीनों के काम का नतीजा शानदार है।
इस स्तर की प्रतिबद्धता काबिले-तारीफ़ है। Google Summer of Code, KDE Season of Code, Linux Foundation LFX, और X.org EVoC जैसे प्रोग्रामों में भाग लेने की सलाह दी जाती है। वहाँ बहुत सी दिलचस्प समस्याएँ हैं। काश छात्र रहते समय ऐसे प्रोग्रामों के बारे में पता होता। अब full-time नौकरी होने के कारण open source में योगदान देने का समय नहीं है।
प्रोजेक्ट को पहली नज़र में देखने पर यह अच्छी तरह संगठित लगता है। इसकी सराहना की जानी चाहिए।
प्रोजेक्ट के लिए बधाई और शुभकामनाएँ। compiler उन पहले विषयों में से एक था जिसने computing में रुचि जगाई थी।
यह दिखाता है कि 17 साल के बच्चे अब भी CD को जानते हैं। floppy disk save icon भी शायद अभी पूरी तरह पुराना नहीं हुआ है।
17 साल की उम्र में दिखाई गई जानकारी और परिपक्वता प्रभावशाली है। जिन विषयों पर शोध और काम किया गया है, वे विश्वविद्यालय स्तर पर अपेक्षित होते हैं, और यह प्रोजेक्ट तो postgraduate स्तर के coursework में आ सकता है। सफल करियर की शुभकामनाएँ।
याद आता है कि कम उम्र में Turbo Pascal का इस्तेमाल करके 2D graphics library लिखी थी। वह internet खोजने से पहले का समय था, इसलिए वह बस निजी आनंद तक सीमित रह गया, लेकिन इसे दूसरों के देखने लायक बनाना अच्छी बात है। कोड साफ है, टिप्पणियाँ अच्छी हैं, और README स्पष्ट है।
प्रोजेक्ट के साथ "debugger लिखना" tutorial बनाना उबाऊ हो सकता है, लेकिन बहुत उपयोगी होगा।
यह जानने की जिज्ञासा है कि function name और argument के बीच खाली जगह क्यों डाली जाती है। 18 साल से C code पढ़ने वाले व्यक्ति के रूप में यह थोड़ा अजीब लगता है।