gdb

2016-06-09 9 views
5

के साथ डीबगिंग करते समय स्पष्ट रूप से वालग्रिंड छोड़ें मैं valgrind और gdb का उपयोग कर प्रोग्राम को डीबग कर रहा हूं। हालांकि मैं उन डिबगिंग सत्रों को बर्बर तरीके से समाप्त करता हूं ... क्या वास्तव में यह किया जाना है?gdb

डिबगिंग सत्र

की स्थापना official valgrind website मैं इस कार्यक्रम को चलाने के लिए निम्न उपाय अपनाते हैं से निर्देशों का पालन: एक और से

valgrind --tool=memcheck --vgdb=yes --vgdb-error=0 ./prgm.run 
  • दर्ज करके

    1. मैं valgrind चलाने टर्मिनल सत्र, मैं

      का उपयोग कर जीडीबी चलाता हूं
    2. मैं gdb valgrind को

      (gdb) target remote | vgdb 
      
    3. मैं gdb CLI से कार्यक्रम चलाने कनेक्ट

      (gdb) c 
      

    अब तक तो अच्छा: कार्यक्रम दोनों टर्मिनलों में चलता है (एक का उपयोग किया valgrind के लिए और एक जीडीबी के लिए इस्तेमाल किया)। फिर valgrind एक त्रुटि पाता है, उदाहरण के लिए एक अमान्य पढ़ा जाता है, और प्रोग्राम निष्पादन रोक दिया जाता है। शायद ठीक कार्यक्रम के स्रोत से कुछ या टिप्पणी/टिप्पणी हटाएं सामान:

    सत्र

    उस समय समाप्त, मैं अपने कोड के साथ बेला करना चाहते हैं। नतीजतन, कार्यक्रम को फिर से संकलित करने की जरूरत है। एक नई बाइनरी उत्पन्न होती है। इसके बाद, मैं चल रहे वालग्रिंड और जीडीबी सत्रों को रोकना चाहता हूं (जो पुराने बाइनरी का उपयोग कर रहे थे) और नए वाइनग्रींड और जीडीबी सत्र शुरू करें जो नई बाइनरी का उपयोग करेंगे।

    एक चालू सत्र, मैं gdb

    (gdb) q 
    

    कभी कभी छोड़ने valgrind देखती है कि gdb अब वहां नहीं है और भी इस्तीफा रोकने के लिए। लेकिन दूसरी बार वालग्रिंड भी जारी रहता है-हालांकि कोई जीडीबी प्रक्रिया मौजूद नहीं है ...

    उस स्थिति में मैं अपने वालग्रींड सत्र से संबंधित "memcheck-amd64-" प्रक्रिया को मारता हूं। उस प्रक्रिया की संख्या valgrind संदेशों में इंगित की गई है उदा। 16195==16195== Invalid read of size 8 में)।

    kill -9 16195 
    

    एक नियमित मार पर्याप्त नहीं है: मैं विकल्प का उपयोग करने की जरूरत है।

    मुझे नहीं लगता कि kill -9 का आविष्कार करना है कि यह कैसे किया जाना है ... क्या मुझे कुछ याद आ रही है?

    valgrind संस्करण: 3.10.1

    gdb संस्करण: 7.7.1

  • +0

    फिर भी एक मुद्दा valgrind v3.11.0 और gdb RHEL 7.11-67.el6 का उपयोग कर। –

    उत्तर

    4

    आप भी comand

    (gdb)monitor v.kill 
    

    यह gdb पर नजर रखने के मदद में सूचीबद्ध किया गया उपयोग कर सकते हैं।

    +0

    'gdb' प्रॉम्प्ट (जीएनयू जीडीबी आरएचईएल v7.11-67.el6) पर, 'मॉनिटर v.kill' के परिणामस्वरूप: ' ' " मॉनीटर "कमांड इस लक्ष्य द्वारा समर्थित नहीं है। '' –

    +0

    @ बकेट शानदार, धन्यवाद! –

    +0

    @ एगबर्ट शायद जीडीबी का आपका संस्करण अलग है तो मेरा (v 8.0)। यह देखने के लिए कॉमांड "मॉनीटर हेल्प" आज़माएं कि क्या gdb संस्करण में वाल्ग्रिंड प्रक्रिया को मारने के लिए एक और कमांड है। – bucket

    -2

    मेरे लिए निम्नलिखित काम करता है: gdb पहले से

    1. अलग करें: (gdb) detach(gdb) quit:
    2. फिर gdb छोड़ दिया।
    3. फिर CTRL + सी valgrind।
    +0

    'valgrind' पर, CTRL + C दबाकर कोई परिवर्तन नहीं होता है। –