क्या कोई व्यक्ति वैलेग्रिंड कैसे काम करता है इसका एक त्वरित शीर्ष स्तर विवरण प्रदान कर सकता है? एक उदाहरण: यह कैसे पता चलेगा कि स्मृति कब आवंटित और मुक्त की गई है?
जवाबों:
Valgrind मूल रूप से आपके एप्लिकेशन को "सैंडबॉक्स" में चलाता है। इस सैंडबॉक्स में दौड़ते समय, यह उन्नत डिबगिंग और प्रोफाइलिंग करने के लिए अपने स्वयं के निर्देशों को सम्मिलित करने में सक्षम है।
मैनुअल से:
आपका प्रोग्राम तब Valgrind कोर द्वारा प्रदान की गई एक सिंथेटिक CPU पर चलाया जाता है। चूंकि नए कोड को पहली बार निष्पादित किया गया है, इसलिए कोर कोड को चयनित टूल को सौंपता है। उपकरण इस पर अपना इंस्ट्रूमेंटेशन कोड जोड़ता है और परिणाम को वापस कोर में सौंपता है, जो इस इंस्ट्रूमेंटेड कोड के निरंतर निष्पादन को समन्वित करता है।
तो मूल रूप से, वेलग्रिंड एक वर्चुअल प्रोसेसर प्रदान करता है जो आपके एप्लिकेशन को निष्पादित करता है। हालाँकि, आपके आवेदन के निर्देशों को संसाधित करने से पहले, उन्हें उपकरण (जैसे मेमचेक) में पारित कर दिया जाता है। ये उपकरण तरह तरह के प्लगइन्स हैं, और प्रोसेसर पर चलने से पहले वे आपके एप्लिकेशन को संशोधित करने में सक्षम हैं।
इस दृष्टिकोण के बारे में महान बात यह है कि आपको अपने कार्यक्रम को संशोधित करने या इसे चलाने के लिए सभी को मान्य नहीं करना है। यह आपके प्रोग्राम को धीमी गति से चलाने का कारण बनता है, हालाँकि वेलग्रिंड का मतलब प्रदर्शन को मापना या आपके आवेदन के सामान्य निष्पादन के दौरान चलाना नहीं है, इसलिए यह वास्तव में कोई समस्या नहीं है।
Valgrind एक डायनामिक बाइनरी एनालिसिस (DPA) टूल है, जो मेमोरी एलोकेशन की जाँच करने, गतिरोधों का पता लगाने और अनुप्रयोगों को प्रोफाइल करने के लिए डायनेमिक बाइनरी इंस्ट्रूमेंटेशन (DPI) फ्रेमवर्क का उपयोग करता है। DPI फ्रेमवर्क का अपना निम्न स्तर का मेमोरी मैनेजर, शेड्यूलर, थ्रेड हैंडलर और सिग्नल हैंडलर है। Valgrind टूल सूट में टूल जैसे टूल शामिल हैं
Valgrind टूल असेंबली और रीसेंथेसाइज़ तंत्र का उपयोग करता है जहां यह एप्लिकेशन को एक प्रक्रिया में लोड करता है, एप्लिकेशन कोड को डिसेबल करता है, विश्लेषण के लिए इंस्ट्रूमेंटेशन कोड जोड़ता है, इसे वापस असेंबल करता है और एप्लिकेशन को निष्पादित करता है। यह इंस्ट्रूमेंटेशन कोड के साथ एप्लिकेशन को एम्बेड करने के लिए जस्ट इन्टाइम कंपाइलर (JIT) का उपयोग करता है।
Valgrind Tool = Valgrind Core + Tool Plugin
Valgrind Core एप्लिकेशन कोड को अलग करता है और इंस्ट्रूमेंटेशन के लिए टूल के कोड कोड को पास करता है। टूल प्लगइन विश्लेषण कोड जोड़ता है और इसे वापस असेंबल करता है। इस प्रकार, Valgrind, Valgrind ढांचे के ऊपर हमारे अपने उपकरण को लिखने के लिए लचीलापन प्रदान करता है। वैलग्राइंड छाया रजिस्टर और निर्देश पढ़ने / लिखने के निर्देश, सिस्टम कॉल, स्टैक और हीप आवंटन पढ़ने के लिए छाया मेमोरी का उपयोग करता है।
Valgrind सिस्टम कॉल के आसपास रैपर प्रदान करता है और सिस्टम कॉल के हिस्से के रूप में एक्सेस की गई मेमोरी को ट्रैक करने के लिए हर सिस्टम कॉल के लिए प्री और पोस्ट कॉलबैक रजिस्टर करता है। इस प्रकार, Valgrind लिनक्स ऑपरेटिंग सिस्टम और क्लाइंट एप्लिकेशन के बीच एक OS अमूर्त परत है।
चित्र Valgrind के 8 चरणों को दर्शाता है:
valgrind आपके प्रोग्राम और OS के बीच एक परत के रूप में बैठता है, OS को कॉल इंटरसेप्ट करता है जो मेमोरी (डी) आवंटन का अनुरोध करता है और रिकॉर्डिंग करता है कि पहले क्या हेरफेर किया जा रहा है, वास्तव में मेमोरी को आवंटित करने और एक समकक्ष वापस करने के लिए। यह अनिवार्य रूप से अधिकांश कोड प्रोफाइलर काम करते हैं, बहुत निचले स्तर को छोड़कर (सिस्टम फ़ंक्शन प्रोग्राम कॉल के बजाय सिस्टम कॉल)।
यहाँ आप कुछ अच्छी जानकारी पा सकते हैं:
इसके अलावा LD_PRELOAD से खुद को परिचित करें।
Valgrind मूल रूप से एक वर्चुअल मशीन है जो आपके प्रोग्राम को निष्पादित करती है। यह एक वर्चुअल आर्किटेक्चर है जो मेमोरी को आवंटित / फ्री करने के लिए प्रत्येक कॉल को स्वीकार करता है।