2011-04-16 17 views
12

मैं अनंत रिकर्सन के कारण एक स्टैक ओवरफ़्लो डीबग कर रहा हूं। कार्यक्रम विफल रहता है जब ढेर 700 कॉल गहरी होती है।जीडीबी में फ़ंक्शन नाम के अनुसार मैं स्टैक ट्रेस में फ्रेम पर कैसे जा सकता हूं?

मैं उस फ्रेम पर कूदना चाहता हूं जिसमें फ़ंक्शन को प्रारंभ में बुलाया गया था। हालांकि, जीडीबी मुझे एक समय में लगभग 20 प्रविष्टियों के ढेर के शीर्ष से स्टैक ट्रेस दिखाता है, और मुझे आश्चर्य है कि अगर मैं किसी भी तरह से कॉलिंग फ़ंक्शन पर सीधे अपनी संख्या खोजने के लिए स्टैक ट्रेस को देखे बिना छोड़ सकता हूं।

इसके अंत में, मैं इसके नंबर के बजाय इसके नाम के आधार पर एक स्टैक फ्रेम पर कूदने में सक्षम होना चाहता हूं।

क्या यह जीडीबी में किया जा सकता है?

उत्तर

13

दो विकल्प:

  • up 200 आप 200 फ्रेम लाएगा
  • आप पुनरावर्ती दिनचर्या की प्रारंभिक फोन करने वाले जानते हैं, तो आप क्या कर सकते हैं f[rame] <caller-func> - यह caller-func पते के फ्रेम पर कूद जाएगा।

मैनुअल में Frame Selection देखें।

13

आपको शून्य से bt का उपयोग करना होगा। यह bt के समान है, लेकिन पहले सबसे बाहरी एन फ्रेम मुद्रित करें।
उदाहरण के लिए:
bt -100

और यह संभव है कि आप फ्रेम है कि आप पहली या दूसरी स्क्रीन पर निरीक्षण करने के लिए की जरूरत है देखेंगे।
bt -100 का उपयोग करके स्टैक ट्रेस कीट करने के बाद मुझे आसानी से बहुत सी रिकर्सिव कॉल के साथ एक pboblem को ठीक करने में मदद मिली।

और फिर इस मुद्दे को आदेश
f <here the number of your frame you need to inspect>

+0

बहुत बढ़िया। ऐसा करने के लिए एक रास्ता तलाश रहे थे। भ्रमित चीज हमेशा "फ्रेम" इस नोटेशन का समर्थन नहीं करती है लेकिन "बीटी" करता है। – Marenz

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