2009-01-07 12 views
22

ब्रेकपॉइंट के बिना मैं एक जीडीबी निष्पादन कैसे रोकूं?जीडीबी ब्रेकपॉइंट के बिना निष्पादन को कैसे रोकें?

+0

प्रक्रिया कैसे शुरू हुई थी? आपने इसे कैसे लगाया? डिफ़ॉल्ट रूप से, 'gdb -pid' के साथ संलग्न करने से पहले से ही प्रक्रिया बंद हो जाती है। क्या आप 'सी' हिट करने के बाद मतलब है? –

उत्तर

15

बस एक नियमित रूप से बाधा का उपयोग Ctrl - ठीक काम करेंगे। जीडीबी सिर्फ SIGINT को डीबगिंग प्रक्रिया में आगे बढ़ाता है जो तब मर जाता है। जीडीबी गैर-मानक निकास को पकड़ लेगा और वहां प्रक्रिया को तोड़ देगा, ताकि आप अभी भी सभी थ्रेड, उनके ढेर और चर के वर्तमान मूल्यों की जांच कर सकें। यह ठीक काम करता है, हालांकि आप ब्रेक पॉइंट्स का उपयोग करना बेहतर होगा। एकमात्र बार जब मैं खुद ऐसा कर रहा हूं, तो मुझे लगता है कि मुझे किसी प्रकार के अनंत लूप में मिला है।

+0

मैंने^सी की कोशिश की लेकिन यह काम नहीं किया मैं प्रॉम्प्ट पर कुछ भी टाइप नहीं कर पा रहा हूं। साथ ही प्रोग्राम बहु थ्रेडेड यूआई है, क्या यह मुद्दा हो सकता है? – anand

+0

Ctrl-C woks जैसा मैं चाहता हूं, लेकिन मैं इसे जीडीबी 7.7.1 पर पुन: पेश नहीं करता हूं: प्रक्रिया को Ctrl-C और मरने लगते नहीं थे। यह केवल जीडीबी द्वारा बंद कर दिया गया, मार डाला नहीं। 'C' को फिर से मारना या 'अलग करना' इसे जारी रखने से रोकता है। –

4

बस बिना किसी तर्क के BREAK टाइप करें।

तोड़, जब किसी भी तर्क के बिना कहा जाता है, को तोड़ने अगले निर्देश पर एक ब्रेकपाइंट सेट चयनित स्टैक फ्रेम

+0

जीडीबी के संदर्भ में, चल रहा है, रोक रहा है, कदम। यह वास्तव में "रोकना" की तरह था जिसकी मुझे आवश्यकता थी, ऐप को मारने के लिए आपको जीडीबी दस्तावेज में समझाया गया था। +1 – hobb

4

प्रारंभ एक खोल में निष्पादित किया जाना है, ps का उपयोग कर प्रक्रिया आईडी ढूंढें और का उपयोग करके इसे SIGSTOP या SIGINT भेज हत्या आदेश (जैसे हत्या -INT पिड)।

10

जीयूआई अनुप्रयोग^सी और^कंसोल अनुप्रयोगों को तोड़ने के तरीके पर प्रतिक्रिया नहीं करते हैं।

  1. संदेश एक अलग टर्मिनल से आवेदन करने के लिए SIGSTOP: इन दिनों सबसे गैर तुच्छ परियोजनाओं जीयूआई अनुप्रयोगों या पुस्तकालयों मुख्य रूप से जीयूआई अनुप्रयोगों में इस्तेमाल हो जाते हैं के बाद से, आप दो विकल्प हैं। यह बोझिल है।

  2. यदि आप^सी या^जीडीबी प्रॉम्प्ट पर ब्रेक दबाते हैं, तो जीडीबी समाप्त हो जाएगा लेकिन आवेदन चल रहा रहेगा। फिर आप -p कमांड लाइन स्विच का उपयोग करके इसे संलग्न करने के लिए फिर से जीडीबी चला सकते हैं। यह डीबगर राज्य खो देता है।

दोनों ही मामलों में, तो आप इस सहायक हो सकते हैं: tasklist | grepProcessName| sed -e 's/ProcessName*\([0-9]*\).*/gdbModuleName-pid=\1/' > rungdb.sh आप शेल स्क्रिप्ट, makefiles में इस्तेमाल के लिए इस संशोधित कर सकते हैं या इसके बजाय एक संकेत भेजने के लिए GDB संलग्न ।

info threads आपको यह पता लगाने में मदद करेगा कि आप किस धागे को देखना चाहते हैं। फिर threadThreadNumber पर स्विच करने के लिए इसका उपयोग करें।

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