क्या विंडोज के लिए एक अच्छा वेलग्रिंड विकल्प है?


210

मैं अपने C कोडिंग / डिबगिंग को बेहतर बनाने में मदद करने के लिए Valgrind में देख रहा था जब मुझे पता चला कि यह केवल Linux के लिए है - मुझे अपने OS को Linux में ले जाने में कोई अन्य आवश्यकता या रुचि नहीं है इसलिए मैं सोच रहा था कि क्या विंडोज के लिए समान रूप से अच्छा कार्यक्रम है।


आप किस प्रकार की डिबगिंग कर रहे हैं? Valgrind काफी समृद्ध टूलसेट है, और नीचे दिए गए उत्तर सभी प्रकार की दिशाओं में इंगित करते हैं। स्मृति रिसाव / आवंटन डिबगिंग पर जोर देने के साथ।
jakobengblom2

1
हो सकता है कि आप अपने विंडोज के अंदर वर्चुअल लिनक्स मशीन पर कोड का परीक्षण कर सकते हैं, बस जब आपको इसे जांचना होगा। आप वर्चुअल और गैर-वर्चुअल मशीन के बीच विकास फ़ोल्डर को साझा कर सकते हैं। वह है, अगर कोड पर्याप्त पोर्टेबल है।
लिरन ओरवी

जवाबों:


29

कुछ और अच्छे वाणिज्यिक उपकरण:


1
शुद्ध करें: वंदनीय लेकिन फिर भी उपयोगी है, जैसा कि कॉर्पोरेट स्वामित्व के कितने परिवर्तनों से बचा है!
नॉर्मन रैमसे

2
इंश्योर ++ हमेशा अपने कोड को इंस्ट्रूमेंट करता है, और हमेशा के लिए रनटाइम पर अपने कोड को निष्पादित करने के लिए।
सी जॉनसन

117

जैसा कि jakobengblom2 ने बताया, वेलग्रिंड में उपकरणों का एक सूट है। निर्भर करता है कि आप किसके बारे में बात कर रहे हैं अलग-अलग विंडो काउंटर पार्ट्स हैं। मैं यहां केवल ओएसएस या मुफ्त टूल का उल्लेख करूंगा।

1. मेमचेक:

डॉ। स्मृति। यह एक अपेक्षाकृत नया उपकरण है, विंडोज 7 पर बहुत अच्छी तरह से काम करता है। मेरी पसंदीदा विशेषता यह है कि यह रिपोर्ट में समान लीक के आवंटन ढेर को समूहित करता है।

http://code.google.com/p/drmemory/

मैंने UMDH ( http://support.microsoft.com/kb/268343 ) का भी उपयोग किया है और इसे सेटअप के लिए उपयोगी और आसान पाया है। यह Win2000 से Win7 तक काम करता है।

AppVerifier एक विंडोज़ स्वदेशी कोड डेवलपर्स के लिए swissknife होना चाहिए, इसकी "मेमोरी" चेकर समान काम करता है http://msdn.microsoft.com/en-us/library/dd371695%28v=vs.85%29.aspx

2. कॉलग्रिंड:

मेरा पसंदीदा बहुत ही है। ( http://www.codersnotes.com/sleepy ) यह छोटा लेकिन बहुत उपयोगी और उपयोग में आसान है।

यदि आपको अधिक सुविधाएँ चाहिए, तो AMD CodeAnalyst ™ प्रदर्शन विश्लेषक मुफ़्त है: http://developer.amd.com/documentation/videos/pages/introductiontoamdcodeanalystperformanceanalyzer.aspx

विंडोज परफॉरमेंस एनालिसिस टूल माइक्रोसॉफ्ट से मुक्त है, इसका उपयोग करना बहुत आसान नहीं है, लेकिन अगर आप समय बिताना चाहते हैं तो यह काम पूरा कर सकते हैं। http://blogs.microsoft.co.il/blogs/sasha/archive/2008/03/15/xperf-windows-performance-toolkit.aspx डाउनलोड: http://msdn.microsoft.com/en-us/peritance / cc752957

3. मालिश:

विंडोज़ पर समान (बिल्कुल सटीक मिलान नहीं) मुफ्त उपकरण हैं:

Sysinternals से VMMap: http://technet.microsoft.com/en-us/sysinternals/dd535533

हीडबग में हीप कमांड: http://hacksoflife.blogspot.com/2009/06/heap-debugging-memoryresource-leak-with.html

4. कैशेग्रिंड:

उपर्युक्त विंडोज प्रदर्शन उपकरण में L2 कैश मिस प्रोफाइलिंग क्षमता का निश्चित स्तर है, लेकिन कैशेग्रिंड के रूप में उपयोग करने के लिए काफी अच्छा और आसान नहीं है।

5. डीआरडी:

विंडोज पर अभी तक कुछ भी मुफ्त और शक्तिशाली नहीं पाया गया है, विंडोज़ के लिए एकमात्र मुफ्त टूल जो मुझे मिल सकता है वह थोड़ा करीब है। AppVerifier में "लॉक" चेकर है: http://msdn.microsoft.com/en-us/library /dd371695%28v=vs.85%29.aspx


2
वहाँ भी gperftools (पूर्व में Google PerfTools) है । यह वैलग्राइंड रिप्लेसमेंट (वास्तव में क्या है) नहीं है, लेकिन इसमें एक नया मॉलोक, सीपीयू प्रोफाइलर, हीप प्रोफाइलर और चेकर है। लिनक्स और विंडोज (इंक मिंग) और अन्य यूनियनों पर समर्थन के रूप में एक नज़र डालें।
एलेक्सा

30

अपने विंडोज ऐप को डीबग करने के लिए Valgrind + वाइन का उपयोग क्यों नहीं करें? Http://wiki.winehq.org/Wine_and_Valgrind देखें

(क्रोमियम मेमोरी त्रुटियों के लिए विंडोज संस्करण की जांच करने के लिए इसका उपयोग करता है; build.chromium.org देखें और प्रयोगात्मक या मेमोरी झरने देखें, और वाइन की खोज करें।)

डॉ। मेमोरी भी है, dynamorio.org/drmemory.html देखें


3
क्योंकि तब आप विंडोज ऐप को डिबगिंग नहीं करेंगे - आप लिनक्स ऐप को डीबग करेंगे।
जॉन डिब्लिंग

33
वाइन में फिर से जोड़ने की आवश्यकता नहीं है। बस अपने .exe और .pdb को लिनक्स बॉक्स पर ट्रांसफर करें। और आप लिनक्स ऐप को डिबगिंग नहीं करेंगे; आप अपने सटीक विंडोज ऐप को डीबग कर रहे हैं।
दान केगेल

2
वास्तव में, लंगड़ा क्लोन की तुलना में असली चीज़ का उपयोग करना बेहतर है: डी लव वेलग्रिंड।
वैकल्पिक

11
अच्छा! खिड़कियों से आप एक वर्चुअल मशीन चला सकते हैं, जो लिनक्स में चल रही है, जो आपके सॉफ्टवेयर को लगभग vm वाइन में चला रही है, वैलग्राइंड vm में। बोनस अंक अगर विंडोज़ vm के अंदर एक vm रनिंग
लाइन से चलाया

15

विजुअल C ++ के लिए, विज़ुअल लीक डिटेक्टर की कोशिश करें । जब मैंने इसका उपयोग किया, तो इसने एक newकॉल से मेमोरी लीक का पता लगाया और लीक के स्रोत कोड में वास्तविक लाइन लौटा दी। नवीनतम रिलीज http://vld.codeplex.com/ पर देखी जा सकती है ।


यह मेरे लिए काम नहीं करता है। मैंने एक साधारण प्रोजेक्ट बनाने की भी कोशिश की, जो मूल रूप से कुछ मेमोरी आवंटित करने और इसे मुक्त नहीं करने के अलावा और कुछ नहीं करता था। वीएलडी ने इसका पता नहीं लगाया। : - |
Synetech

@ सिंथे इंक। मुझे VS2010 में भी यही समस्या थी ... VLD के नवीनतम संस्करण का उपयोग करके मेरी समस्या हल हो गई
Relaxxx

14

आपके द्वारा उपयोग किए जा रहे Windows के लिए विकास परिवेश में स्वयं के उपकरण हो सकते हैं। उदाहरण के लिए, विजुअल स्टूडियो आपको अपने कार्यक्रमों में मेमोरी लीक का पता लगाने और अलग करने की सुविधा देता है


6
यह बहुत कम व्यावहारिक उपयोग है। यह अपमानजनक आवंटन के लिए फ़ाइल नाम / लिनेनंबर को लॉग करेगा, लेकिन यह केवल जानकारीपूर्ण है यदि आप सीधे मॉलोक कहते हैं। नए / डिलीट का उपयोग करते समय, यह अनपेक्षित रूप से new.h को "ऑफेंडिंग" कोड के रूप में पिन करेगा।
user9665

3
यह मेरे लिए सही ढंग से काम करता है, सही लाइन को इंगित करता है यहां तक ​​कि नए / डिलीट का उपयोग किया जाता है।
रोड्रिगो

लेकिन यह एक पुस्तकालय समारोह आवंटित करता है, तो यह काम करेगा? जैसे स्ट्रैडअप।
एलेक्स बुडोव्स्की

1
Valdrind और भी बहुत कुछ करता है , फिर मेमोरी लीक्स ढूंढता है , मैं मुख्य रूप से इसे फ्रीड और अनइंस्टाल्ड स्टैक और हीप मेमोरी का उपयोग खोजने के लिए करता हूं जो अन्यथा डिबग करने के लिए अविश्वसनीय रूप से कठिन हो सकता है।
ideasman42

1
@ user9665 विज़ुअल लीक डिटेक्टर ( vld.codeplex.com ) न्यूनतम मेमोरी कोड परिवर्तनों के साथ प्रत्येक मेमोरी लीक के लिए पूर्ण कॉलस्टैक प्रदान करता है। साइट पर उदाहरण देखें
KindDragon

14

मैं कुछ उपकरण सूचीबद्ध करना चाहूंगा, आशा है कि उपयोगी होगा

इस लेख को और अधिक विस्तार से पढ़ें

  1. शुद्ध
  2. बाउंड चेकर
  3. आवरण (मूल रूप से इसका एक कोड विश्लेषक लेकिन, यह स्थैतिक में मेमोरी रिसाव को पकड़ लेगा)
  4. चमक कोड
  5. dmalloc
  6. ccmalloc
  7. NJAMD
  8. YAMD
  9. वेलग्रिंड
  10. mpatrol
  11. बीमा ++


12

Windows के लिए डीबगिंग उपकरण का Pageheap.exe भाग है। यह मुफ़्त है और मूल रूप से एक कस्टम मेमोरी एलोकेटर / डीललोकेटर है।

Http://support.microsoft.com/kb/286470 देखें


Pageheap / gflags ने मुझे कुछ बुरा ढेर भ्रष्टाचार समस्याओं की तह तक जाने में मदद की है।
the_mandrill

मैंने पाया gflags+ gdb(मिंगव से) निदान में सहायक।
जारेक्जेक

8

विज़ुअल स्टूडियो के संयोजन में मैं आमतौर पर विज़ुअल लीक डिटेक्टर या बस _CrtDumpMemoryLeaks () का उपयोग करता हूं जो कि एक win32 एपि कॉल है। दोनों ही फैंसी नहीं हैं, लेकिन उन्हें काम मिल गया है।


6

मेरे पास अतीत में कंपूवेयर देवपार्टनर स्टूडियो का उपयोग करने का मौका था और यह वास्तव में अच्छा था, लेकिन यह काफी महंगा है। एक सस्ता समाधान GlowCode हो सकता है , मैंने सिर्फ 5.x संस्करण के साथ काम किया और, मुझे डिबग करने के लिए आवश्यक प्रक्रिया से जुड़ी कुछ समस्याओं के बावजूद, इसने काफी अच्छा काम किया।


महँगा हाँ। यह एक सप्ताह के अंत में वापस भुगतान किया, सिर्फ प्रोफाइलर टुकड़े का उपयोग कर।
EvilTeach


5

Viusual Studio स्मृति लीक का पता लगाने में मदद कर सकता है। देखें माइक्रोसॉफ्ट विज़ुअल सी ++ टिप्स और ट्रिक्स -> "मेमोरी लीक" खंड। इस पोस्ट को SO में भी देखें

हालांकि वास्तविक अनुरेखण केवल विजुअल स्टूडियो के टीम एडिशन के साथ ही संभव है।


4

इसी तरह के उपकरणों की सूची के लिए सॉफ्टवेयर क्यूए परीक्षण और टेस्ट टूल रिसोर्स पेज पर " सोर्स टेस्ट टूल्स " लिंक देखें ।

मैंने प्रोफाइलिंग के लिए BoundsChecker, DevPartner Studio और Intel V-Tune का उपयोग किया है। मुझे वी-ट्यून सबसे अच्छा लगा; आप विभिन्न इंटेल चिपसेट का अनुकरण कर सकते हैं और यह आपको उस प्लेटफॉर्म के लिए अनुकूलन करने के संकेत देगा।




3

बूस्ट टेस्ट लाइब्रेरी मेमोरी लीक का पता लगा सकती है।


3

शुद्ध कैसे करें ?


वास्तव में स्वतंत्र नहीं ... लेकिन मुझे लगता है कि आप परीक्षण उद्देश्यों के लिए एक परीक्षण लाइसेंस पा सकते हैं।
डेविड रॉड्रिग्ज - dribeas

BoundsChecker के लिए 2011-02-04 तक डेड लिंक।
dwj



2

यदि आप Borland / CodeGear / Embarcadero C ++ बिल्डर के साथ विकसित कर रहे हैं, तो आप CodeGuard का उपयोग कर सकते हैं।


2

कमोबेश सभी प्रोफाइल्स में मेमोरी लीक की जाँच शामिल है और मेमोरी आवंटित होने पर आपको स्टैक दिखाते हैं।

मैं Intels समानांतर निरीक्षक की सिफारिश कर सकता हूं । उपयोग करने के लिए सरल और कोई पुनर्संयोजन की आवश्यकता नहीं है। परीक्षण संस्करण 30 दिनों तक चलता है।

GlowCode और AtromatedQA में ऐसे भी शामिल हैं। वे सभी नि: शुल्क परीक्षण प्रदान करते हैं।

कॉन्ट्रास्ट में Compuware DevPartner (उर्फ BoundsChecker) को "इंस्ट्रूमेंटेशन" recompile को धीमा करना पड़ता है और त्रुटियों के लिए जाँच करने पर एप्लिकेशन धीमा भी चलता है। और BoundsChecker 64 Bit evrrions के साथ बिल्कुल भी काम नहीं कर सकता है। हमने उस टूल को छोड़ दिया।


2
मैं स्पष्ट रूप से चमक की सिफारिश करूँगा। मैंने अपने ऐप द्वारा कॉल किए जा रहे dll के भीतर मेमोरी लीक खोजने के लिए इसका उपयोग अतीत में किया है।
बॉब

मेरे अंतिम कार्यस्थल पर देवपार्टनर का उपयोग करते समय बड़ी मंदी की शिकायतें थीं। वे इसका उपयोग करने से बचने के लिए सब कुछ करते हैं क्योंकि यह कितना धीमा होगा।
कैलिथ




2

हम सिर्फ एक मेमोरी सुरक्षा जाँच उपकरण को पूरा कर रहे हैं विंडोज के लिए को , जो GCC और माइक्रासॉफ्ट विजुअल C (अभी तक C ++ नहीं) को हैंडल करता है, और बीटा टेस्टर्स की तलाश कर रहा है।

EDIT 12 जून, 2011: अभी बीटा नहीं, अब GCC और Microsoft Visual Studio C के लिए उत्पादन।


2

मुझे आज यह SF प्रोजेक्ट मिला:

http://sourceforge.net/p/valgrind4win/wiki/Home/

वे विंडोज के लिए वैलग्राइंड पोर्ट कर रहे हैं। संभवतः कई वर्षों में हमारे पास खिड़कियों पर एक विश्वसनीय वेलग्राइंड होगा।


1

इस प्रश्न को देखें: क्या विंडोज के लिए कोई अच्छा वेलग्रिंड विकल्प है? । हालांकि वैलेरिंड के लिए सामान्य विकल्प पूछा जाता है, यह मुख्य रूप से मेमोरी लीक डिटेक्टरों पर चर्चा करता है और न कि दौड़ की स्थिति के लिए।


1

मैंने इंश्योर ++ का इस्तेमाल किया, जो सी ++ मेमोरी लीक्स / करप्शन और कई अन्य बग्स जैसे कि अनइंस्टॉल किए गए वैरिएबल, पॉइंटर एरर, स्ट्रिंग्स आदि को खोजने में बेहतरीन काम करता है। यह विजुअल "कोड कवरेज" और रन टाइम मेमोरी यूसेज आदि भी करता है। आपका कोड .. आप इसे ट्रेल संस्करण के लिए आज़मा सकते हैं ..


1

आप शायद पढ़ना चाहें कि मोज़िला मेमोरी लीक के बारे में क्या कर रहा है । उनके टूलबॉक्स में एक उपकरण हैस बोहेम कचरा कलेक्टर जो मेमोरी लीक डिटेक्टर के रूप में उपयोग किया जाता है


1

आप IBM Purify को RuntimeChecker ट्रायल ओ.टी. दे सकते हैं परीक्षण के ..

एक निशुल्क समाधान दृश्य स्टूडियो में निम्नलिखित कोड का उपयोग करना होगा:

#ifdef _DEBUG
#define new DEBUG_NEW
#endif

बस इसे अपने सभी cpp फ़ाइलों के शीर्ष में लिखें। यह डिबग रन को रोकने के लिए आपके एप्लिकेशन की मेमोरी लीक का पता लगाएगा और उन्हें आउटपुट विंडो में सूचीबद्ध करेगा। मेमोरी लीक लाइन पर डबल क्लिक करना आपको उस लाइन को हिगिलेट करेगा जहाँ मेमोरी आवंटित की गई है और कभी रिलीज़ नहीं हुई है। इससे आपको मदद मिल सकती है: http://www.flipcode.com/archives/How_To_Find_Memory_Leaks.shtml

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.