'gdb'

2015-12-09 7 views
5

के साथ किसी फ़ंक्शन के अंदर किसी विशिष्ट पंक्ति में ब्रेकपॉइंट सेट करना, मैं 'gdb' के साथ कक्षा (एक वर्ग जिसे मैंने बनाया) के सदस्य फ़ंक्शन के अंदर पांचवीं पंक्ति में ब्रेकपॉइंट सेट करने का प्रयास कर रहा हूं।'gdb'

here से मैं सिर्फ समझ में आ समारोह के शुरुआत में एक ब्रेकपाइंट सेट करने का तरीका है, लेकिन मैं समारोह के अंदर एक विशिष्ट लाइन, या एक विशेष पर यह स्थापित करना चाहते हैं की शुरुआत से ऑफसेट यह समारोह

सामान्य रूप से मेरे पास पहले से मौजूद किसी अन्य ब्रेकपॉइंट से ऑफ़सेट सेट करके 'gdb' में एक लाइन को ब्रेकपॉइंट सेट करने का कोई तरीका है?

धन्यवाद!

उत्तर

1

फ़ंक्शन की शुरुआत के सापेक्ष एक ब्रेकपॉइंट सेट करने का कोई तरीका नहीं है, जिससे स्रोत फ़ाइल संशोधित होने पर यह अपनी सापेक्ष स्थिति बनाए रखे। यह कभी-कभी उपयोगी होगा; लेकिन यह सिर्फ एक विशेषता है कि किसी ने भी जीडीबी में जोड़ा नहीं है।

इसे शायद पायथन से नकल किया जा सकता है, हालांकि यह सामान्य ब्रेकपॉइंट्स काम करने के तरीके से बिल्कुल काम नहीं कर सका, क्योंकि पाइथन को जीडीबी के अंदर ब्रेकपॉइंट रीसेटिंग तंत्र तक पहुंच नहीं है।

एक-शॉट समाधान या तो अन्य उत्तर या पायथन से दिखाया जा सकता है।

जब मुझे इस प्रकार की कार्यक्षमता की आवश्यकता होती है - एक ब्रेकपॉइंट मिड-फ़ंक्शन जो स्रोत परिवर्तनों के खिलाफ उचित रूप से मजबूत है - मैंने "एसडीटी" स्थिर जांच बिंदुओं का उपयोग किया है। ये आपको अपने स्रोत में ऐसे स्पॉट नाम देने देते हैं।

5

आप gdb breakpoint +<offset> के साथ वर्तमान बंद स्थिति से ऑफसेट पर ब्रेकपॉइंट बना सकते हैं।

आप gdb break <linenumber> (वर्तमान स्रोत फ़ाइल के लिए) या gdb break <filename>:<linenumber> (वर्तमान फ़ाइल के अलावा किसी अन्य फ़ाइल के लिए) का उपयोग करके किसी विशिष्ट लाइन नंबर पर ब्रेकपॉइंट भी बना सकते हैं।

docs में अधिक जानकारी।

1
  1. info fun <function name> या पूरी तरह से योग्य info functions <function name> कार्यों और उनके स्रोत फ़ाइलें
  2. list <function name>

प्रिंट लाइनों समारोह समारोह की शुरुआत के आसपास केंद्रित हो जाता है।

नीचे दिए गए कुछ कोड के साथ सभी फ़ंक्शन के स्रोत कोड सूचीबद्ध करेगा।

  1. चुनें लाइन आप चाहते हैं
  2. break <filename:linenum>
0

का तरीका यहां बताया GDB के लिए अजगर स्क्रिप्ट के साथ यह स्वचालित कर सकते हैं क्या है:

class RelativeFunctionBreakpoint (gdb.Breakpoint): 
    def __init__(self, functionName, lineOffset): 
     super().__init__(RelativeFunctionBreakpoint.calculate(functionName, lineOffset)) 

    def calculate(functionName, lineOffset): 
     """ 
     Calculates an absolute breakpoint location (file:linenumber) 
     based on functionName and lineOffset 
     """ 
     # get info about the file and line number where the function is defined 
     info = gdb.execute("info line "+functionName, to_string=True) 
     # extract file name and line number 
     m = re.match(r'Line[^\d]+(\d+)[^"]+"([^"]+)', info) 
     if not m: 
      raise Exception('Failed to find function %s.' % functionName) 
     line = int(m.group(1))+lineOffset #add the lineOffset 
     fileName = m.group(2) 
     return "%s:%d" % (fileName, line) 

बेसिक उपयोग:

RelativeFunctionBreakpoint("yourFunctionName", lineOffset=5) 

आप एक कस्टम ब्रेकपॉइंट भी लिख सकते हैं। अधिक देखें: https://stackoverflow.com/a/46737659/5787022

स्क्रिप्ट के आधिकारिक प्रलेखन अजगर का उपयोग करना GDB

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