2010-08-14 13 views
15

में जारी रखने को कैसे रोकूं मैं पहली बार जीडीबी का उपयोग कर रहा हूं। मैंमैं जीडीबी

$ gdb 

चलाने तो मैं चल रहा हूँ

attach <mypid> 

तो मुझे लगता है कि मेरी प्रक्रिया अवरुद्ध हो गया है (जो शायद ठीक है)। अब मैं इसे लगातार चलाने के लिए चाहते हैं, तो मैं

continue 

चलाने के लिए और मेरी प्रक्रिया चल जारी है लेकिन यहाँ से मैं अटक कर रहा हूँ मैं फिर से मेरे वर्तमान स्टैक ट्रेस आदि को देखने के लिए मैं से बाहर नहीं मिल सका चाहते हैं जारी रहा ... मैंने Ctrl - डी इत्यादि की कोशिश की लेकिन मेरे लिए कुछ भी काम नहीं किया ... (बस एक अनुमान था)।

+0

Ctrl-c काम करना चाहिए। –

+0

मैंने भी कोशिश की CTRL-C यह – Jas

+0

अटक गया क्या मतलब है? एक अनंत लूप? यह भी देखें: http://stackoverflow.com/questions/8702658/gdb-how-do-i-pause-during-loop-execution –

उत्तर

11

आपको जीडीबी द्वारा जुड़ी प्रक्रिया को बाधित करना चाहिए। जीडीबी को बाधित न करें। टर्मिनल में में टर्मिनल में ctrl-c द्वारा प्रक्रिया को बाधित करें, जिस प्रक्रिया को शुरू किया गया था या प्रक्रिया को SIGINT को हत्या -2 procid द्वारा भेज दिया गया था। प्रक्रिया की आईडी संलग्न होने के साथ।

+1

शर्मिंदा gdbserver/क्लाइंट का उपयोग करते समय मेजबान से ऐसा करने का कोई तरीका नहीं है। – barkside

+0

स्पष्ट बताना नहीं चाहता, लेकिन यह केवल तभी काम करेगा जब कार्यक्रम SIGINT को संभाल नहीं लेता है। यदि मुख्य() या कुछ init() ... में एक सिग्डसेट उन्माद है; – vesperto

4

जीडीबी प्रक्रिया में नियंत्रण + सी आपको कमांड प्रॉम्प्ट पर वापस लाएगा।

+0

ctrl-c मेरे लिए काम नहीं करता है कृपया एक नज़र डालें: ' bash- 3.00 # जीडीबी जीएनयू जीडीबी 6.8 कॉपीराइट (सी) 2008 फ्री सॉफ्टवेयर फाउंडेशन, इंक लाइसेंस जीपीएलवी 3 +: जीएनयू जीपीएल संस्करण 3 या बाद में यह मुफ्त सॉफ्टवेयर है: आप इसे बदलने और फिर से वितरित करने के लिए स्वतंत्र हैं। कानून द्वारा अनुमत सीमा तक कोई वारंटी नहीं है। विवरण के लिए "शो कॉपीिंग" और "वारंटी दिखाएं" टाइप करें। यह जीडीबी "i386-pc-solaris2.10" के रूप में कॉन्फ़िगर किया गया था। (gdb) संलग्न 4305 कार्रवाई करने के लिए 4305 पुन: प्रयास करें # 1 अटैच किया जा रहा: पुन: प्रयास करें # 2: ' – Jas

+0

 Retry #3: Retry #4: [New LWP 1] 0xfef298b5 in ??() (gdb) info frame Stack level 0, frame at 0x80477c8: eip = 0xfef298b5; saved eip 0xfef1b5d2 Arglist at 0x80477c0, args: Locals at 0x80477c0, Previous frame's sp is 0x80477c8 Saved registers: eip at 0x80477c4 (gdb) print The history is empty. (gdb) continue Continuing. ^D ^C quit ^C^C^C ^C 
Jas

+0

मैं कैसे इस plz फ़ॉर्मेट कर सकते हैं? मेरे पास यह अलग-अलग पंक्तियों में था, मैंने टिप्पणियों में यह कैसे किया है कि मैंने अलग-अलग पंक्तियों में क्या चिपकाया है? – Jas

4

यहां एक छोटा GDB tutorial है, और यहां एक full GDB manual है।

डीबगिंग का बिंदु प्रोग्राम के दिलचस्प/संदिग्ध हिस्सों का निरीक्षण करना है। Breakpoints आपको कुछ स्रोत स्थान पर निष्पादन रोकने की अनुमति देता है, और watchpoints आपको दिलचस्प डेटा परिवर्तनों को रोकने की अनुमति देता है।

सरल उदाहरण:

(gdb) break my_function 
(gdb) cont 

यह my_function की शुरुआत में एक ब्रेकपाइंट डालें, तो होगा जब कार्यक्रम के निष्पादन समारोह कार्यक्रम निलंबित कर दिया जाएगा प्रवेश करती है और आप GDB वापस संकेत है, और करने में सक्षम हो पाने के inspect program's state। या आप कोड के माध्यम से step कर सकते हैं।

(gdb) watch my_var 
(gdb) cont 

एक ही है, लेकिन अब कार्यक्रम जो कुछ भी स्थान my_var का मूल्य को संशोधित करता है कि कम से रोक दिया जाएगा।

बेकार प्लग - यहां पर NYC BSD User Group पर एक लिंक है। उम्मीद है की यह मदद करेगा।

+0

लेकिन मैं सिर्फ अपने समय के समय और उस बिंदु पर स्टैक ट्रेस की जांच करने के लिए एक बिंदु चुनना चाहता था ... और बाद में कार्यक्रम जारी रखने के लिए, मुझे ब्रेकपॉइंट्स नहीं चाहिए ... मेरे मामले में मैं जांच करना चाहता हूं कार्यक्रम के ढेर ट्रेस मेरे स्वयं के समय में। – Jas

+0

ठीक है, 'सिग्नल' के बारे में 'जानकारी सिग्नल' क्या कहता है? –

+0

@Jas स्टैक ट्रेस की जांच करने के लिए यादृच्छिक रूप से एक चल रहे प्रोग्राम को बाधित करने के लिए क्या संभव उपयोग है? आपको बस यह पता चल जाएगा कि वर्तमान में स्टैक पर मौजूद कोड वह कोड है जो चल रहा है। आमतौर पर यह उपयोगकर्ता इनपुट के लिए प्रतीक्षा एक लूप है। हो हम – theMayer