GDB में, मैं सीधे सबसे ऊपर कॉल स्टैक फ्रेम में कैसे कूद सकता हूं?


9

मेरे पास एक सी प्रोग्राम है जो एक अनंत पुनरावर्ती गंदगी में गहराई से उतरने के बाद सेग दोष करता है। GDB में प्रक्रिया को पीछे हटाना बेकार है क्योंकि कॉल स्टैक फ्रेम कम से कम 1000 फ़्रेम गहरा है, और दोहराया फ़ंक्शन कॉल चार सामान्य पुनरावर्ती फ़ंक्शन कॉल की श्रृंखला है (इसलिए ब्रेकप्वाइंट बेकार लगते हैं)। बार-बार कॉल करने के लिए बार-बार कॉल करने से चार फ़ंक्शन नाम, ओवर और ओवर पढ़ते हैं। यह मेरे साथ हुआ कि मैं 'अप' 'अप' 'अप' कर रहा हूं ... मुझे ऊंचा उठना पड़ेगा, इसलिए मैं देख सकता था कि यह पैटर्न पहले कहां से शुरू हुआ था, लेकिन ऐसा लगता है कि यह सबसे ऊपरी कॉल से शुरू करना अधिक कुशल होगा। स्टैक फ्रेम और इसके बजाय नीचे कदम, क्योंकि मेरा कूबड़ यह है कि अनंत पुनरावृत्ति प्रक्रिया में जल्दी शुरू होता है। अगर कॉल स्टैक में कुल एन फ्रेम थे, तो मुझे पता है कि मैं बस कर सकता था

gdb>> up N

स्टैक (Nth फ्रेम) के शीर्ष पर जाने के लिए, लेकिन समस्या यह है कि मुझे एन नहीं पता है। क्या कॉल स्टैक में फ़्रेम की कुल संख्या खोजने के लिए कोई कमांड है? या, क्या सबसे ऊपरी फ्रेम में कूदने के लिए एक अंतर्निहित अंतर्निहित GDB कमांड है? यह मेरे लिए हुआ कि सबसे ऊपरी फ्रेम मुख्य () फ़ंक्शन होनी चाहिए - क्या मैं उस ज्ञान का लाभ उठा सकता हूं जो सबसे ऊपर के फ्रेम पर पहुंच सकता है?

जवाबों:


9

मेरे परीक्षणों में, बहुत बड़ी संख्या के साथ 'अप' का उपयोग करने के परिणामस्वरूप सबसे ऊपरी फ्रेम प्रदर्शित किया गया, जैसे

(gdb) up 99999
#58 0x0000000000442fb4 in main ()

1
अगर स्टैक का आकार 99999 से अधिक नहीं है तो काम नहीं करता
The Vivandiere

इस जवाब ने मेरे लिए काम किया, बस एक बड़ी संख्या का उपयोग करने की आवश्यकता थी।
tesch1

23

आप सबसे ऊपरी फ्रेम से शुरू करने के लिए एक नकारात्मक संख्या के साथ 'बीटी' निर्दिष्ट कर सकते हैं:

बीटी -20

फिर आप अपनी इच्छानुसार सीधे फ्रेम में जाने के लिए 'फ्रेम' (या 'एफ') का उपयोग कर सकते हैं।


1

fr 0आपको सबसे ऊपरी स्टैक फ्रेम में ले जाएगा। frफ्रेम के लिए खड़ा है।


2
यह गलत दिशा है
tesch1

@ tesch1 काफी उचित है, लेकिन जीडीबी बैकट्रेस आपको शीर्ष पर नीचे दिखाती है :)
विवान्डीयर
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.