जीडीबी का उपयोग कर लिनक्स पर सी या सी ++ प्रोग्राम डीबग कैसे करें
कंप्यूटर प्रोग्राम विकसित करने की सामान्य प्रक्रिया इस तरह कुछ जाती है: कुछ कोड लिखें, कोड संकलित करें, प्रोग्राम चलाएं। यदि कार्यक्रम अपेक्षित काम नहीं करता है, तो आप त्रुटियों (बग) को देखने के लिए कोड पर वापस जाते हैं और फिर चक्र को दोहराते हैं।
कार्यक्रम की जटिलता और बग की प्रकृति के आधार पर, ऐसे समय होते हैं जब आप त्रुटियों को ट्रैक करने में कुछ अतिरिक्त सहायता के साथ कर सकते हैं। यह एक "डीबगर" करता है। यह आपको चलने के दौरान एक कंप्यूटर प्रोग्राम की जांच करने की अनुमति देता है। आप विभिन्न चर के मान देख सकते हैं, आप स्मृति की सामग्री की जांच कर सकते हैं और आप एक निश्चित बिंदु पर प्रोग्राम को रोक सकते हैं और एक समय में कोड एक पंक्ति के माध्यम से कदम उठा सकते हैं।
लिनक्स पर प्राथमिक डीबगर जीएनयू डीबगर (जीडीबी) है। यह आपके सिस्टम पर पहले ही स्थापित हो सकता है (या gdb-minimal नामक एक स्लिम डाउन संस्करण), लेकिन यह सुनिश्चित करने के लिए कि टर्मिनल में निम्न आदेश टाइप करें:
sudo apt-gdb स्थापित करें
डीबगर का उपयोग करने के लिए, आपको बाइनरी में डीबग जानकारी शामिल करने के लिए कंपाइलर को बताना होगा। नैनो का उपयोग करके "hello10.c" नामक एक फ़ाइल बनाएं:
नैनो हैलो 10.c
निम्न कोड में कॉपी और पेस्ट करें:
# मुख्य शामिल करें () {int i; के लिए (i = 0; i <10; i ++) printf ("% d", i); }
"-g" ध्वज डिबग जानकारी उत्पन्न करने के लिए कंपाइलर को बताता है, इसलिए प्रोग्राम उपयोग को संकलित करने के लिए:
gcc -g -o hello10 hello10.c
प्रोग्राम प्रकार डीबगिंग शुरू करने के लिए:
जीडीबी हैलो 10
इस बिंदु पर यदि आप प्रोग्राम को चलाने शुरू करते हैं ("रन" कमांड का उपयोग करके), तो प्रोग्राम कुछ भी करने का मौका मिलने से पहले निष्पादित और खत्म हो जाएगा। इसे रोकने के लिए, आपको "ब्रेकपॉइंट" बनाना होगा जो प्रोग्राम को निर्दिष्ट बिंदु पर रोक देगा। ऐसा करने का सबसे आसान तरीका है "मुख्य ()" फ़ंक्शन में रोकने के लिए डीबगर को बताना:
मुख्य तोड़ो
अब कार्यक्रम शुरू करें:
रन
डीबगर कोड की पहली निष्पादन योग्य रेखा पर रोक दिया गया है, उदाहरण के लिए "फॉर" लूप। अगली पंक्ति में जाने के लिए, संक्षिप्त के लिए "अगला" या "n" टाइप करें। दो बार लूप के चारों ओर दोहराने के लिए "अगला" का उपयोग करना जारी रखें:
एक चर के मान का निरीक्षण करने के लिए "प्रिंट" कमांड का उपयोग करें। हमारे उदाहरण कार्यक्रम में, हम चर "i" की सामग्री की जांच कर सकते हैं:
प्रिंट I
लूप के चारों ओर दोहराएं और कुछ और बार देखें और देखें कि "मैं" कैसे बदलता है:
अगले अगले अगले अगले प्रिंट i
उपरोक्त उदाहरण में "i" 4 के मान तक पहुंच गया है। लूप जारी रहेगा जबकि "i" 10 से कम है। आप "सेट var" का उपयोग कर चर के मान को बदल सकते हैं। "I" से 10 सेट करने के लिए gdb में निम्न टाइप करें।
मैं var var = = 10 प्रिंट मैं सेट करें
आपको एक और "अगला" करने की आवश्यकता हो सकती है (जब आप "i" को 10 पर सेट करते हैं तो प्रोग्राम को रोक दिया गया था), लेकिन जब "फॉर" लूप लाइन को अगली निष्पादित किया जाता है, तो लूप बाहर निकल जाएगा, क्योंकि "i" नहीं है 10 से कम लंबा।
"अगला" कमांड फ़ंक्शंस में ड्रिल नहीं करता है बल्कि फ़ंक्शन निष्पादित किया जाता है, और फ़ंक्शन के बाद अगली पंक्ति में डीबगर फिर से बंद हो जाता है। यदि आप किसी फ़ंक्शन में कदम उठाना चाहते हैं, तो "चरण" कमांड या "एस" का उपयोग करें।
अपने प्रोग्राम को डीबग करने का एक और तरीका एक चर पर घड़ी सेट करना है। जब भी वैरिएबल बदलता है तो यह प्रोग्राम को रोकता है। "रन" टाइप करके प्रोग्राम को पुनरारंभ करें। चूंकि प्रोग्राम पहले से चल रहा है, इसलिए डीबगर पूछेगा कि क्या आप इसे शुरुआत से फिर से शुरू करना चाहते हैं।
कार्यक्रम मुख्य रूप से बंद हो जाएगा (जैसा कि हमने ब्रेक पॉइंट को नहीं हटाया है)। अब "i" पर एक घड़ी सेट करें:
देखो मैं जारी रखो
"जारी रखें" कमांड प्रोग्राम को अगले ब्रेक पॉइंट स्थिति तक फिर से चलाना शुरू कर देता है। इस मामले में यह फिर से चलाएगा जब तक वेरिएबल "i" बदलता है (घड़ी के कारण)।
डिबगिंग रोकने के लिए, बस "छोड़ें" कमांड का उपयोग करें।
यदि आप जीडीबी के बारे में कुछ और जानना चाहते हैं, तो शुरू करने के लिए एक अच्छी जगह जीडीबी दस्तावेज़ीकरण है। यदि आपको ऊपर दिए गए उदाहरणों में कोई समस्या है, तो कृपया नीचे टिप्पणी अनुभाग का उपयोग करें और हम देखेंगे कि हम सहायता कर सकते हैं या नहीं।