2013-02-01 4 views
14

जीडीबी में, मेरे पास finish कमांड को आसानी से फ़ंक्शन फ्रेम के निष्पादन को समाप्त करने के लिए है, अक्सर एक लूप के कुछ पुनरावृत्तियों को देखने के बाद, डीबगर में कोड के माध्यम से चलने पर, मैं लूप को समाप्त करना चाहता हूं और बाद में चलना चाहता हूं यह। वर्तमान में, मैं लूप और continue के बाद पहली पंक्ति पर एक ब्रेक पॉइंट सेट करके ऐसा करता हूं, हालांकि, यह वास्तव में आसान होगा अगर एक साधारण जीडीबी कमांड इस पर प्रभाव डालता है लेकिन सेट ब्रेक पॉइंट की आवश्यकता नहीं होती है और बाद में मंजूरी दे दी।क्या लूप निर्माण समाप्त करने के लिए कोई gdb कमांड है?

क्या जीडीबी में मौजूदा लूप निष्पादित निष्पादन को समाप्त करने के लिए वैसे भी है?

+0

'jump' निष्पादन फेरबदल संस्करण: https://stackoverflow.com/questions/2200556/how-do-i-get-gdb-to-break -ऑथ-ऑफ-ए-लूप –

उत्तर

17

क्या लूप निर्माण समाप्त करने के लिए कोई gdb कमांड है?

पाश की अंतिम पंक्ति, या until NNN पर until निष्पादित जहां NNN पाश की अंतिम पंक्ति है।

(gdb) help until 
Execute until the program reaches a source line greater than the current 
or a specified location (same args as break command) within the current frame. 

एक को तोड़ने बिंदु की आवश्यकता नहीं स्थापित किया जाना और बाद में मंजूरी दे दी।

अस्थाई breakpoints स्वचालित रूप से खुद को स्पष्ट:

(gdb) help tbreak 
Set a temporary breakpoint. 
Like "break" except the breakpoint is only temporary, 
so it will be deleted when hit. Equivalent to "break" followed 
by using "enable delete" on the breakpoint number. 
+4

तो 'till' और 'advance' के बीच क्या अंतर है? – Jester

+1

@ जेस्टर "यह आदेश तब तक समान है, लेकिन अग्रिम रिकर्सिव फ़ंक्शन कॉल पर नहीं छोड़ेगा, और लक्षित स्थान को वर्तमान फ्रेम के समान फ्रेम में नहीं होना चाहिए।" https://sourceware.org/gdb/onlinedocs/gdb/Continuing-and-Stepping.html –

+0

यह भी लगता है कि 'अग्रिम' अधिक सटीक है कि यह केवल वास्तविक कोड स्थान पर कूदता है। –

4

gdb नहीं जानता कि एक लूप समाप्त होता है तो यह ऐसा नहीं कर सकता है। मुझे लगता है कि आप सबसे अच्छा कर सकते हैं लूप के बाद एक स्थान के साथ advance कमांड का उपयोग करें।

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