* Nix सिस्टम पर एक बड़े C / C ++ कोड में मेमोरी से संबंधित समस्या को कैसे ट्रैक / फिक्स करें


9

स्मृति-संबंधी समस्या पर नज़र रखने के दौरान आप किस रणनीति का उपयोग करते हैं? स्मृति लीक, स्मृति भ्रष्टाचार आदि की पहचान करने के लिए आप कौन से उपकरण (ओपन सोर्स के साथ-साथ मालिकाना) का उपयोग करते हैं? यदि सिस्टम पर केवल gdb / dbx उपलब्ध है तो आप मेमोरी लीक को कैसे ट्रैक करेंगे?

मेरे लिए, केवल डिबगर के साथ मेमोरी लीक को ठीक करना बहुत कठिन है।


2
व्यक्तिगत रूप से मुझे लगता है कि यह सवाल यूनिक्स से संबंधित प्रोग्रामिंग से अधिक है।
फुनेहे

जवाबों:


12

यदि आप स्रोत कोड को बदल सकते हैं, तो Dmalloc महान है; यह सूचीबद्ध करेगा कि कौन से संकेत अप्रमाणित थे और (डिबगिंग प्रतीकों के साथ निर्मित कोड के लिए) वास्तव में उन्हें किस लाइन पर आवंटित किया गया था।

यदि आप नहीं कर सकते, तो Valgrind उस तरह की चीज़ के लिए बहुत मानक है। मैं आमतौर पर Valgrind को उपयोग करने के लिए कुछ हद तक कठिन पाता हूं, लेकिन इसमें अधिक सुविधाएँ हैं और इसमें आपके कोड में dmalloc कॉल जोड़ना शामिल नहीं है


dmalloc बहुत बड़े सिस्टम में अपेक्षित रूप से बहुत अच्छा नहीं है। Valgrind एक बेहतर शर्त है, और वहां भी आप अड़चनें

valgrind --tool memcheck "yourapp" रनटाइम में मेमोरी संबंधी जानकारी देगा (डेस्कटॉप सिस्टम में उपयोगी)। एक और बढ़िया टूल मेमवॉच है लेकिन इसे आपके स्रोत के साथ संकलित किया जाना चाहिए। मेमोवॉच फाइल में लॉग इन कर सकता है इसलिए एम्बेडेड सिस्टम के लिए अधिक उपयुक्त है।
राजगणेश

7

वैलग्राइंड आश्चर्यजनक रूप से सहायक है।


2

मैसिज़ (वेलग्रिंड से) मेमोरी लीक खोजने का सबसे अच्छा तरीका है। अपना संदेहास्पद कोड दोहराएं (या अपने प्रोग्राम को लंबे समय तक चलाएं) और परिणाम को ms_print के साथ डंप करें। आमतौर पर, कॉल स्टैक आपको इसे ठीक करने के लिए पर्याप्त जानकारी दे रहा है।

GDB के साथ, आप एक रनिंग प्रोग्राम और कॉल फ़ंक्शंस को संलग्न करने का प्रयास कर सकते हैं जैसे कि malloc_stats()

यदि आपका प्रोग्राम किसी अन्य भाषा में लिखा गया है, तो यह अधिक मुश्किल हो सकता है। हाल ही में, कुछ GDB ने स्क्रिप्टबिलिटी प्राप्त की है, और लोगों ने gdb-heap जैसे दिलचस्प प्रोजेक्ट शुरू किए हैं , जो एक कोर डंप से पायथन मेमोरी का विश्लेषण कर सकते हैं। सी ++ ऑब्जेक्ट्स के लिए समान मेमोरी एनालिसिस स्क्रिप्ट संभव हो सकती है।

यह भी पढ़ें /programming/2564752/examining-cc-heap-memory-statistics-in-gdb


1

Solaris के लिए, इस StackOverflow प्रश्न के उत्तर में कई उपकरण सूचीबद्ध हैं (इनमें खराब मेमोरी एक्सेस के अन्य रूपों के साथ लीक की जाँच शामिल है)।


1

मैं कुछ समय से ऑब्जेक्टिव-सी कर रहा हूं, और एक एनालाइजर है जो सी लेवल मेमोरी मैनेजमेंट और उस तरह के सामान से निपटता है। क्लैंग स्टेटिक एनालाइज़र इतना अच्छा है कि ऐप्पल ने अपने एक्सकोड आईडीई के साथ बंडल करने का फैसला किया। मुझे यकीन नहीं है कि यह आपके प्रश्न के लिए अच्छा है, लेकिन यदि आप सी कर रहे हैं तो यह एक कोशिश के लायक है।


माइनर क्विबबल: क्लेंग को शुरू से ही एक्सकोड में उपयोग के लिए विकसित किया गया था। देखें clang.llvm.org/clang_video-05-25-2007.html
डैनियल जेम्स

हाय डैनियल, यह सच हो सकता है, लेकिन यह xCode में हाल ही में शामिल नहीं था (या कम से कम मैं बंडल में Apple से डाउनलोड नहीं किया गया)
phunehehe
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.