2010-10-06 12 views
14

क्या कोई मुझे एक त्वरित अवलोकन/मुझे सी प्रोग्राम के ढेर (और ढेर?) का निरीक्षण करने के तरीके के दस्तावेज के लिए इंगित कर सकता है? मैंने सोचा कि यह जीडीबी के साथ किया जाना चाहिए, लेकिन यदि अन्य अधिक कठोर विकल्प हैं, तो यह भी ठीक होना चाहिए।स्टैक/ढेर का पता लगाने के लिए जीडीबी का उपयोग कैसे करें?

धन्यवाद।

+0

आप क्या ऑपरेटिंग सिस्टम का उपयोग करते हैं? –

+0

आह, क्षमा करें, हाँ: ओएस: उबंटू लिनक्स, कंपाइलर: जीसीसी। –

उत्तर

2

डीबगिंग के लिए जीडीबी का उपयोग करने का मेरा पहला दृष्टिकोण ब्रेकपॉइंट्स सेट करना है। ऐसा किया जाता है-

prompt> gdb ./x_bstree.c 
(gdb) #prompt 
(gdb) b 123 #break at line 123 
(gdb) r #start program 

अब आपका प्रोग्राम आपके प्रोग्राम की लाइन 123 पर रुक गया है। अब आप print का उपयोग करके ढेर या ढेर में चर की जांच कर सकते हैं। स्टैक वैरिएबल के लिए बस print <varname> का उपयोग करें। ढेर चर (पॉइंटर्स) के लिए print <*varname> का उपयोग करें। सुनिश्चित नहीं है कि स्टैक/हीप वैरिएबल की जांच करने के लिए कुछ खास करना है?

बहु-थ्रेडेड अनुप्रयोगों को डीबग करने के लिए आपको इसे सिंगल-थ्रेडेड मोड & में चलाने की आवश्यकता होगी, फिर अन्यथा यह तय करना मुश्किल हो जाता है कि क्या हो रहा है।

कुछ भी करने के लिए किसी और वहाँ gdb & कई साइटों के व्यापक प्रलेखन भी प्रदान करते हैं gdb cheat sheets

3

ddd उपयोग करने का प्रयास है। ddd manual

ठीक है। शायद मैं थोड़ा सा विस्तारित करता हूं। मैं इसे इस तरह इस्तेमाल करता हूं।

डिबग प्रतीकों के साथ मेरा कार्यक्रम संकलन:

gcc -g program.c -o program 

रन ddd:

ddd program 

GUI में आप चीजों को देखने मशीन कोड के सभी प्रकार के कर सकते हैं, स्मृति देखने, आदि। चारों ओर देखो। मैनुअल में स्टैक की जांच करने का एक अनुभाग भी है। ddd सी प्रोग्राम की जांच के लिए के लिए अच्छा इंटरफ़ेस प्रदान करता है।

+0

मैंने सोचा कि डीडीडी जीडीबी के लिए सिर्फ एक फ्रंट एंड था, नहीं? –

+0

मुझे इसे जीडीबी से अधिक सुविधाजनक पाया गया है। गुई में आप कई चीजों को एक साथ देख सकते हैं। जीडीबी में मैं हर समय वापस स्क्रॉल कर रहा हूँ। –

+0

यह जीडीबी के लिए सिर्फ एक फ्रंट एंड है, [अद्यतन मैनुअल स्थान] देखें (http://www.gnu.org/software/ddd/manual/html_mono/ddd.html)। हालांकि, यह कंसोल-केवल टूल की तुलना में कुछ प्रकार के वर्कफ़्लो के लिए बहुत अधिक सरल हो सकता है। – starturtle

12

आप 'एक्स' कमांड के साथ कच्चे स्मृति डंप कर सकते हैं

इसलिए यदि आप ढेर के टुकड़े को देखने के लिए या ढेर की तरह

x/10b &stackvar 
x/200b &heapvar-20 

चीजों की कोशिश पिछले एक आप 200 बाइट्स दिखाएगा चाहते हेपवार से पहले 20 बाइट से शुरू होता है।तो अगर आप सिर्फ malloced आप ढेर हैडर देख सकते हैं कि बहुत

+0

मुझे आपका दृष्टिकोण पसंद है! क्या कोई अच्छी जीडीबी प्लगइन है जो ढेर डेटा, हेडर, इन-यूज बिट्स और इसी तरह दिखने वाले ढेर की जांच करने की अनुमति देती है? मैंने अभी पाया [जीडीबी-हीप] (https://fedorahosted.org/gdb-heap/)। दुर्भाग्यवश यह बहुत पुराना और अनजान लगता है। – rc0r

0

देखें ढेर: gdb> backtrace

देखें वर्तमान स्टैक फ्रेम: gdb> info frame

देखें वर्तमान स्टैक फ्रेम के तर्कों: gdb> info args

वर्तमान स्टैक फ्रेम के स्थानीय चर देखें: gdb> info locals

नेविगेट माता पिता स्टैक फ्रेम करने के लिए: gdb> frame 1

Examining the Stack

संबंधित मुद्दे