2011-11-16 19 views
24

ऐसा लगता है कि Valgrind में दो टूल्स हैं जो थ्रेड त्रुटि पहचान दोनों करते हैं: Helgrind और DRD। ये उपकरण काफी समान हैं।क्या मुझे थ्रेड त्रुटि पहचान के लिए हेल्ग्रिंड या डीआरडी का उपयोग करना चाहिए?

मेरा प्राथमिक प्रश्न यह है कि: मेरे बहु-थ्रेडेड कोड को देखने के लिए मुझे दूसरे के बजाय एक का उपयोग कब करना चाहिए?

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

+0

यदि मैं गलत नहीं हूं, तो डीआरडी हेल्ग्रिंड से मुख्य रूप से _newer_ है। अच्छा सवाल, हालांकि – sehe

उत्तर

6

जबकि हेल्ग्रिंड लॉकिंग ऑर्डर उल्लंघन का पता लगा सकता है, अधिकांश कार्यक्रमों के लिए डीआरडी को इसके विश्लेषण करने के लिए कम स्मृति की आवश्यकता होती है। इसके अलावा, डीआरडी को अलग धागे के लिए समर्थन है। अधिक सूक्ष्म मतभेद भी हैं - यदि आप और जानना चाहते हैं तो संबंधित मैनुअल की तुलना करें। http://valgrind.org/docs/manual/hg-manual.html और http://valgrind.org/docs/manual/drd-manual.html भी देखें।

1

मुझे अपने बहु-थ्रेडेड कोड को देखने के लिए दूसरे के बजाय एक का उपयोग कब करना चाहिए?

पर निर्भर करता है आप उस कोड को देखना चाहते हैं।

डेटा दौड़ की जांच के लिए, आप ThreadSanitizer का उपयोग करना चाह सकते हैं।
Comparison with DRD and others

1

विचार करने के लिए एक और बिंदु: valgrind संस्करण 3.6.0 के रूप में, डीआरडी pthread spinlocks का समर्थन करता है, लेकिन हेल्ग्रिंड नहीं करता है। मैंने 3.7.0 की कोशिश नहीं की है, लेकिन रिलीज नोट्स मुझे विश्वास दिलाता है कि यह नहीं बदला है।

+5

3.5.0 के रूप में, हेल्ग्रिंड pthread_spinlock का समर्थन करता है: http://valgrind.org/docs/manual/dist.news.html – leecbaker

1

यदि आप म्यूटेक्स (उदा।, सेमफोर, बाधाएं, हालत चर, इत्यादि) के अलावा किसी भी POSIX सिंक्रनाइज़ेशन प्राइमेटिव का उपयोग कर रहे हैं, तो डीआरडी एक रन के लायक है - यह कुछ सूक्ष्म दुरुपयोगों की पहचान कर सकता है जो हेल्ग्रिंड का पता नहीं लगाता है।

हालांकि, डीआरडी हेल्ग्रिंड की तुलना में अधिक संसाधन गहन प्रतीत होता है (3.14.0 का उपयोग करके मेरे रनों में सीपीयू ओवरहेड की जबरदस्त राशि प्रतीत होती है)।