2010-11-27 9 views
5

मैं फ़ंक्शन को हर बार मुद्रित करने के लिए एक फ़ंक्शन (जिसे एकाधिक बार कहा जाता है) में चर मुद्रित करना चाहता हूं।gdb में किसी विशेष स्थिति पर चर को मुद्रित करने के लिए कैसे?

क्या यह स्वचालित रूप से gdb के माध्यम से ऐसा करना संभव है ?? जब टी == 0 और अन्यथा की अनदेखी कुछ सशर्त मुद्रण की तरह ...

कुछ की तरह ..

void func() 
{ 
    if(t == 0) 
     x = z+1; 
    else 
     x = p+2; 
} 

मैं चाहता हूँ चर मुद्रित करने के लिए ..

+1

[यह] [1] एक अच्छा जीडीबी "धोखा-शीट" है (मुझे एक टुकड़े टुकड़े वाली डबल-पक्षीय प्रति मिली है जब भी मैं डिबगिंग कर रहा हूं, मेरी तरफ), और [यह] [2] एक अच्छा ट्यूटोरियल है। [1]: http://www.tacc.utexas.edu/fileadmin/class_materials/gdb_refcard.pdf [2]: http://www.unknownroad.com/rtfm/gdbtut/gdbuse.html – William

+1

जीडीबी रेफकार्ड लिंक है टूटा हुआ। यह archive.org पर http://web.archive.org/web/20100611221250/http://www.tacc.utexas.edu/fileadmin/class_materials/gdb_refcard.pdf –

+0

सशर्त भाग के बिना सब्सक्रिप्शन पर पाया जा सकता है: http: //stackoverflow.com/questions/6517423/do- विशिष्ट-action-when-certain-breakpoint-hits-in-gdb –

उत्तर

3

लाइन पर एक ब्रेकपाइंट बनाओ x=z+1, चर मुद्रित करने और जारी रखने के लिए 'command [breakpoint number] का उपयोग करें।

यह काम करता है क्योंकि आपके पास कोड में शाखा है।

यदि कोई अन्य शाखा नहीं है। यू 'स्थिति को तोड़ने' का भी उपयोग कर सकते हैं और कमांड चीज कर सकते हैं।

+0

+1, और 'प्रदर्शन' _expr_ का उपयोग करना आसान हो सकता है क्योंकि इसका स्वचालित रूप से मूल्य होगा _expr_ प्रत्येक बार ब्रेकपॉइंट तक पहुंचने पर मुद्रित होता है। – William

6

यह breakpoint, condition, और commands आदेशों के संयोजन के साथ किया जा सकता है।

  1. सेट breakpoint func
  2. के साथ एक ब्रेकपाइंट इसे सशर्त द्वारा condition t == 0
  3. साथ ब्रेकप्वाइंट प्रिंट स्थानीय चर बनाएं:

। साथ

commands 
info locals 
end 

या विशिष्ट चरों:

commands 
print t 
print z 
print x 
end 
0

आप वास्तव में एक शर्त पर एक विशिष्ट स्थान में तोड़ सकते हैं।

उदा। break sourcefile.c: 123 अगर x + y -foo (z) == 4. यह sourcefile.c की पंक्ति 123 पर टूट जाएगा यदि वह अभिव्यक्ति सत्य पर मूल्यांकन करती है। फिर आप जो भी वैल्यू चाहते हैं उसे मुद्रित कर सकते हैं (या अगली बार जब तक शर्त संतुष्ट न हो)

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

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