GDB - डिबगिंग प्रोग्राम
आरंभ करना: प्रारंभ करना और रोकना
gcc -g myprogram.c
Myprogram.c को डीबगिंग विकल्प (-g) के साथ संकलित करता है। आपको अभी भी a.out मिलता है, लेकिन इसमें डीबगिंग जानकारी है जो आपको GDB के अंदर चर और फ़ंक्शन नामों का उपयोग करने देती है, बजाय कच्चे मेमोरी लोकेशन के (मजेदार नहीं)।
gdb a.out
फ़ाइल a.out के साथ GDB खोलता है, लेकिन प्रोग्राम नहीं चलाता है। आपको एक संकेत (gdb) दिखाई देगा - सभी उदाहरण इस संकेत से हैं।
r
r arg1 arg2
आर <file1
पहले लोड किए गए "a.out" को चलाने के तीन तरीके। आप इसे सीधे (r) चला सकते हैं, तर्क (r arg1 arg2), या किसी फ़ाइल में फ़ीड कर सकते हैं। आप आमतौर पर चलने से पहले ब्रेकपॉइंट सेट करेंगे।
help
एच ब्रेकपॉइंट्स
सूचियाँ विषयों (हेल्प) की मदद करती हैं या किसी विशिष्ट विषय (h ब्रेकप्वाइंट) पर मदद प्राप्त करती हैं। GDB अच्छी तरह से प्रलेखित है।
Q - GDB से बाहर निकलें
कोड के माध्यम से कदम
कदम रखने से आप अपने प्रोग्राम का पथ ट्रेस कर सकते हैं, और उस कोड पर शून्य कर सकते हैं जो दुर्घटनाग्रस्त हो रहा है या अमान्य इनपुट लौटा रहा है।
l
एल 50
एल myfunction
वर्तमान लाइन (l), एक विशिष्ट लाइन (l 50), या फ़ंक्शन (l myfunction) के लिए स्रोत कोड की 10 पंक्तियों को सूचीबद्ध करता है।
आगे
अगली पंक्ति तक कार्यक्रम चलाता है, फिर रुक जाता है। यदि वर्तमान लाइन एक फ़ंक्शन है, तो यह पूरे फ़ंक्शन को निष्पादित करता है, फिर रुक जाता है।next जल्दी से अपने कोड के माध्यम से चलने के लिए अच्छा है।
कदम
अगला निर्देश चलाता है, रेखा नहीं। यदि वर्तमान निर्देश एक चर सेट कर रहा है, तो यह उसी के समान हैnext। यदि यह एक फ़ंक्शन है, तो यह फ़ंक्शन में कूद जाएगा, पहले स्टेटमेंट को निष्पादित करेगा, फिर रोक देगा।step आपके कोड के विवरण में गोता लगाने के लिए अच्छा है।
समाप्त
वर्तमान फ़ंक्शन को निष्पादित करता है, फिर विराम दें (इसे स्टेप आउट भी कहा जाता है)। उपयोगी है अगर आप गलती से एक समारोह में कदम रखा।
ब्रेकपॉइंट या वॉचपॉइंट
ब्रेकपॉइंट डिबगिंग में महत्वपूर्ण भूमिका निभाते हैं। जब वे एक निश्चित बिंदु पर पहुंचते हैं तो वे एक कार्यक्रम को रोकते हैं (तोड़ते हैं)। आप चर की जांच और परिवर्तन और निष्पादन को फिर से शुरू कर सकते हैं। यह तब सहायक होता है जब कुछ इनपुट विफलता होती है, या इनपुट का परीक्षण किया जाता है।
तोड़ना ४५
तोड़ना
- 45, या myfunction पर एक ब्रेकपॉइंट सेट करता है। जब यह ब्रेकपॉइंट तक पहुंच जाएगा तो कार्यक्रम रुक जाएगा।
घड़ी x == 3
एक वॉचपॉइंट सेट करता है, जो एक स्थिति बदलने पर प्रोग्राम को रोक देता है (जब x == 3 बदलता है)। वॉचपॉइंट हर फ़ंक्शन कॉल पर ब्रेक किए बिना कुछ इनपुट (myPtr! = NULL) के लिए बहुत अच्छे हैं ।
जारी रखें
ब्रेकपॉइंट / वॉचपॉइंट द्वारा रोक दिए जाने के बाद निष्पादन को फिर से शुरू करें। कार्यक्रम तब तक जारी रहेगा जब तक कि यह अगले ब्रेकपॉइंट / वॉचपॉइंट को हिट न कर दे।
हटाएं N
- हटाए गए ब्रेकप्वाइंट एन (ब्रेकपॉइंट को बनाए जाने पर गिने जाते हैं)।
चर सेट करना
रनटाइम पर चर देखना और बदलना डिबगिंग का एक महत्वपूर्ण हिस्सा है। समस्याओं के मूल कारण को खोजने के लिए फ़ंक्शंस या अन्य परीक्षण मामलों को चलाने के लिए अमान्य इनपुट प्रदान करने का प्रयास करें। आमतौर पर, आप प्रोग्राम को रोक दिए जाने पर चर को देखेंगे / सेट करेंगे।
प्रिंट एक्स
चर x का वर्तमान मूल्य प्रिंट करता है। मूल चर नामों का उपयोग करने में सक्षम होने के कारण (-g) ध्वज की आवश्यकता है; नियमित रूप से संकलित कार्यक्रमों से यह जानकारी हटा दी जाती है।
x = 3 सेट करें
x = y सेट करें
- X को सेट मान (3) या दूसरे चर (y) पर सेट करता है
कॉल myfunction ()
कॉल myotherfunction (x)
कॉल स्ट्रलेन (रहस्य)
उपयोगकर्ता-परिभाषित या सिस्टम फ़ंक्शन को कॉल करता है। यह अत्यंत उपयोगी है, लेकिन छोटी-मोटी क्रियाओं को करने से सावधान रहें।
प्रदर्शन एक्स
लगातार चर x का मान प्रदर्शित करता है, जो हर चरण या ठहराव के बाद दिखाया जाता है। उपयोगी यदि आप एक निश्चित मूल्य के लिए लगातार जाँच कर रहे हैं।
अविवादित एक्स
- डिस्प्ले कमांड द्वारा प्रदर्शित चर के निरंतर प्रदर्शन को हटाता है।
बैकट्रेस और चेंजिंग फ्रेम्स
स्टैक वर्तमान फ़ंक्शन कॉल की एक सूची है - यह आपको दिखाता है कि आप कार्यक्रम में कहां हैं। एक फ़्रेम एकल फ़ंक्शन कॉल का विवरण संग्रहीत करता है, जैसे कि तर्क।
बीटी
Backtracesया वर्तमान फ़ंक्शन स्टैक को यह दिखाने के लिए प्रिंट करता है कि आप वर्तमान प्रोग्राम में कहां हैं। यदि मुख्य कॉल फ़ंक्शन (ए), जो कॉल बी (), जिसे सी कहते हैं (), बैकट्रेस है
c <= current location
b
a
main
up
नीचे
फ़ंक्शन स्टैक में ऊपर या नीचे अगले फ्रेम पर जाएं। अगर आप अंदर हैंc, आप आगे बढ़ सकते हैं b या a स्थानीय चरों की जांच करना।
वापसी
- वर्तमान फ़ंक्शन से लौटता है।
सिग्नल संभालना
सिग्नल कुछ घटनाओं के बाद फेंके गए संदेश हैं, जैसे टाइमर या त्रुटि। जब यह एक संकेत का सामना करता है तो GDB रुक सकता है; आप इसके बजाय उन्हें अनदेखा करना चाह सकते हैं।
संभाल [सिग्नलनाम] [क्रिया]
SIGUSR1 नॉस्टॉप को संभालें
SIGUSR1 noprint को संभालें
SIGUSR1 को अनदेखा करें
GDB को एक निश्चित संकेत (SIGUSR1) को अनदेखा करने का निर्देश दें जब ऐसा होता है। अनदेखी के अलग-अलग स्तर हैं।