के साथ डीबगिंग करते समय स्पष्ट रूप से वालग्रिंड छोड़ें मैं valgrind और gdb का उपयोग कर प्रोग्राम को डीबग कर रहा हूं। हालांकि मैं उन डिबगिंग सत्रों को बर्बर तरीके से समाप्त करता हूं ... क्या वास्तव में यह किया जाना है?gdb
डिबगिंग सत्र
की स्थापना official valgrind website मैं इस कार्यक्रम को चलाने के लिए निम्न उपाय अपनाते हैं से निर्देशों का पालन: एक और से
valgrind --tool=memcheck --vgdb=yes --vgdb-error=0 ./prgm.run
दर्ज करके
मैं valgrind चलाने टर्मिनल सत्र, मैं
का उपयोग कर जीडीबी चलाता हूंमैं gdb valgrind को
(gdb) target remote | vgdb
मैं 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
फिर भी एक मुद्दा valgrind v3.11.0 और gdb RHEL 7.11-67.el6 का उपयोग कर। –