जीडीबी के साथ कदम-दर-कदम, स्टेप-ओवर और स्टेप-आउट कैसे करें?


42

मैंने helpGDB में रहते हुए टाइप किया था, लेकिन स्टेप-इन, स्टेप-ओवर और स्टेप-आउट के बारे में कुछ नहीं पाया। मैंने _start( break _start) में एक असेंबली प्रोग्राम में ब्रेकपॉइंट लगाया । बाद में मैंने टाइप किया nextऔर इसने डीबगिंग को समाप्त कर दिया। मुझे लगता है कि यह था क्योंकि यह समाप्त हो गया था _startऔर कदम नहीं था जैसा मैं चाहता था।

कोई भी मदद कर सकता है?


पूरा GDB डॉक्स पढ़ें। जैसा कि मुझे याद है, वे इस बारे में काफी मददगार थे, जब मैं पहली बार इसे सीख रहा था। दुर्भाग्य से, मुझे कई दशकों तक उस स्तर पर किसी भी कार्यक्रम को डिबग करने की आवश्यकता नहीं थी, इसलिए वास्तविक आदेशों से मेरे दिमाग में बदबू आ गई है। इसलिए, मैं वास्तव में एक उत्तर नहीं लिख सकता। लेकिन, यदि आप इसे मैनुअल से समझ लेते हैं, तो आप बोनस के लिए अपने प्रश्न का उत्तर दे सकते हैं।
MAP

@MAP मैं फिर से कोशिश करूँगा। मैंने एक बेहतर डिबगर (केडीबीजी) का उपयोग करने की कोशिश की, लेकिन मैं इसे उबंटू में उपयोग करने में सफल नहीं हुआ
पिची वुआना

जवाबों:


38

help running कुछ संकेत प्रदान करता है:

वहाँ stepऔर nextसंस्थापन (और भी nextiऔर stepi) कर रहे हैं।

(gdb) help next
Step program, proceeding through subroutine calls.
Usage: next [N]
Unlike "step", if the current source line calls a subroutine,
this command does not enter the subroutine, but instead steps over
the call, in effect treating it as a single source line.

तो हम देख सकते हैं कि stepचरणों में सबरूटीन्स, लेकिन nextकदम होगा अधिक सबरूटीन्स।

stepऔर stepi(और nextऔर nexti) "लाइन" या "अनुदेश" वृद्धि के साथ भेद कर रहे हैं।

step -- Step program until it reaches a different source line
stepi -- Step one instruction exactly

संबंधित है finish:

(gdb) help finish
Execute until selected stack frame returns.
Usage: finish
Upon return, the value returned is printed and put in the value history.

बहुत अधिक उपयोगी जानकारी https://sourceware.org/gdb/oniltocs/gdb/Continuing-and-Stepping.html पर है


जब तक यह एक अलग स्रोत रेखा तक नहीं पहुंचता, तब तक इसका क्या अर्थ है ?
बजे पिची वुआना

1
for(i=0;i<10;i++) { printf("%d\n",i); }एक स्रोत लाइन है, लेकिन कई निर्देश हैं।
स्टीफन हैरिस

3
वहाँ एक तरह से बाहर कदम है? मैं इसे चलाने में मदद नहीं कर सका।
nukeguy

1
"स्टेप-आउट" से आपका क्या तात्पर्य है? finishआदेश वर्तमान ढेर फ्रेम, जो आम तौर पर वर्तमान सबरूटीन को पूरा करने और फोन करने वाले के लिए वापस आ जाएगी पूरी कर लेगा।
स्टीफन हैरिस

@PichiWuana gdb तब तक आवश्यक रूप से कई विधानसभा निर्देशों के माध्यम से आगे बढ़ेगा जब तक कि स्रोत कोड की अगली पंक्ति का प्रतिनिधित्व करने वाला पहला निर्देश नहीं पहुंच जाता
U007D

0

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

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.