2010-11-12 8 views
11

में है तो मैं बैकट्रैस में एक निश्चित फ़ंक्शन नाम दिखाई देने पर केवल एक तोड़ने के लिए एक जीडीबी ब्रेकपॉइंट पर एक शर्त सेट करना चाहता हूं। ऐसा करने का सबसे अच्छा तरीका क्या है?जीडीबी ब्रेक अगर फ्रेम बैकट्रैस

+0

संभावित डुप्लिकेट http://stackoverflow.com/questions/5336403/is-there-any-way-to-set-a-breakpoint-in-gdb-that-is-condition-on-the-call-stac) –

उत्तर

2

मुझे यकीन नहीं है कि आप वास्तव में क्या करना चाहते हैं, लेकिन एक संभावित कामकाज, यदि आपके पास प्रासंगिक फ़ंक्शन के स्रोत कोड तक पहुंच है, तो कुछ वैश्विक बूलियन वैरिएबल को true पर फ़ंक्शन की शुरुआत में सेट करना है , और फ़ंक्शन से बाहर निकलने से ठीक पहले इसे false पर सेट करें। फिर आप एक सशर्त ब्रेकपॉइंट सेट कर सकते हैं (condition कमांड का उपयोग करके) केवल तभी रोकने के लिए जब यह बूलियन चर true है।

+0

यही वह है जो मैं कर रहा था लेकिन मुझे यह जानना अच्छा लगेगा कि कैसे बिना किसी संकलन के इसे करने के लिए। – Chazz

3

पायथन स्क्रीप्टिंग की तुलना में एक आसान समाधान temporary breakpoint का उपयोग कर रहा है।

यह इस तरह दिखता है:

b ParentFunction 
command 1 
    tb FunctionImInterestedIn 
    c 
end 

हर बार जब आप ParentFunction में तोड़ने, तो आप एक बार की ब्रेकप्वाइंट समारोह पर सेट करेंगे आप वास्तव में रुचि रखते हैं, तो उनका प्रदर्शन जारी रहेगा (शायद जब तक आप हिट वह ब्रेकपॉइंट)।

जब से तुम ठीक एक बार FunctionImInterestedIn पर विभाजित करेंगे, यह अगर FunctionImInterestedInParentFunction के संदर्भ में कई बार कहा जाता है काम नहीं करेगा और आप प्रत्येक मंगलाचरण पर तोड़ने के लिए चाहते हैं।

0

rix0rrr के जवाब देने के लिए वैकल्पिक:

b main 
commands 
set $inParentFunction = 0 
c 
end 

b ParentFunction 
commands 
set $inParentFunction = 1 
c 
end 

b FunctionImInterestedIn if ($inParentFunction) 
की [? वहाँ gdb कि कॉल स्टैक पर सशर्त है में एक ब्रेकपाइंट सेट करने के लिए कोई तरीका है] (