आप कोड के हुड के नीचे देख सकते हैं या कई उपकरणों का उपयोग करके आंतरिक सीएलआर डिवाइस को देख सकते हैं। यह पोस्ट एक ट्वीट से पैदा हुआ था, और मुझे उन सभी को धन्यवाद देना होगा जिन्होंने उपयुक्त उपकरणों की सूची बनाने में मदद की। अगर मैं उनमें से किसी से भी चूक गया, तो टिप्पणियों में लिखें।
सबसे पहले, मुझे यह उल्लेख करना होगा कि एक अच्छा डीबगर विजुअल स्टूडियो और VSCode में पहले से मौजूद है । कई अच्छे (कमर्शियल) .NET प्रोफाइलर्स और एप्लिकेशन मॉनिटरिंग टूल देखने लायक हैं। उदाहरण के लिए, मैंने हाल ही में Codetrack के साथ काम करने की कोशिश की और इसकी क्षमताओं से प्रभावित हुआ।
हालांकि, शेष पोस्ट व्यक्तिगत कार्यों को करने के लिए उपकरणों के लिए समर्पित है , जो कि यह समझने में मदद करेगा कि क्या हो रहा है। सभी उपकरण खुले स्रोत हैं ।

PerfView एक बेहतरीन टूल है जिसका मैं कई सालों से इस्तेमाल कर रहा हूं। यह विंडोज इवेंट ट्रेसिंग (ईटीडब्ल्यू) के आधार पर काम करता है और आपको बेहतर ढंग से समझने की अनुमति देता है कि सीएलआर के अंदर क्या हो रहा है, और यह मेमोरी और सीपीयू के उपयोग का प्रोफाइल प्राप्त करने का अवसर भी देता है। टूल को मास्टर करने के लिए, आपको बहुत सारी जानकारी को अवशोषित करना होगा, उदाहरण के लिए प्रशिक्षण वीडियो की मदद से, लेकिन यह समय और प्रयास के लायक है।
यह टूल इतना उपयोगी है कि Microsoft इंजीनियर खुद इसका उपयोग करते हैं, और MSBuild में हाल के प्रदर्शन में सुधार के लिए PerfView का उपयोग करते हुए अड़चनों का विश्लेषण करने के बाद दिखाई दिया।
यह टूल Microsoft.Diagnostics.Tracing.TraceEvent लाइब्रेरी पर आधारित है, जिसका उपयोग आप अपने खुद के टूल बनाने के लिए कर सकते हैं। इसके अलावा, चूंकि पुस्तकालय का स्रोत कोड खुला है, समुदाय के लिए धन्यवाद, इसमें कई उपयोगी कार्य दिखाई दिए हैं, उदाहरण के लिए, लौ-ग्राफ :

SharpLab रोसलिन कंपाइलर द्वारा उत्पन्न IL कोड की जाँच के लिए एक उपकरण के रूप में उभरा, और समय के साथ कुछ और में विकसित हुआ:
शार्पलैब .NET कोड को चलाने के लिए एक इंटरैक्टिव वातावरण है, जो कोड को संकलित करने के मध्यवर्ती चरणों और परिणामों को प्रदर्शित करता है। भाषा के कुछ कार्य केवल दूसरों के लिए रैपर हैं, उदाहरण के लिए () प्रयास / पकड़ बन जाते हैं। SharpLab के साथ, आप कोड देखेंगे क्योंकि कंपाइलर इसे देखता है और .NET भाषाओं के सार को बेहतर ढंग से समझता है।
उपकरण C #, Visual Basic और F # का समर्थन करता है, लेकिन इसमें सबसे दिलचस्प कार्य Decompilation / Disassembly हैं:
विघटन / विघटन कार्यों के लिए इस्तेमाल किया जा सकता है:
- C #
- दृश्य मूल
- आईएल
- JIT असम (मूल असम कोड)
आपने सही तरीके से समझा: उपकरण कोडांतरक कोड को आउटपुट करता है जो .NET JIT आपके C # कोड से उत्पन्न होता है:

इस उपकरण के साथ, आप .NET ऑब्जेक्ट्स की संरचना को मेमोरी में विश्लेषण कर सकते हैं, अर्थात। JITTER ने आपकी कक्षा या संरचना से संबंधित क्षेत्रों को कैसे व्यवस्थित किया। उच्च-प्रदर्शन कोड लिखते समय यह उपयोगी है। हमारे पास एक उपकरण होना भी अच्छा है जो हमारे लिए कड़ी मेहनत करता है।
कोई आधिकारिक दस्तावेज नहीं है जो क्षेत्र संरचना का वर्णन करता है, क्योंकि सीएलआर लेखक भविष्य में इसे बदलने का अधिकार सुरक्षित रखते हैं। लेकिन संरचना का ज्ञान उपयोगी हो सकता है यदि आप उच्च गति वाले अनुप्रयोग पर काम कर रहे हैं।
आप संरचना का अध्ययन कैसे कर सकते हैं? आप Visual Studio में कच्ची मेमोरी देख सकते हैं या SOS डीबगिंग एक्सटेंशन में !dumpobj
उपयोग कर सकते हैं। दोनों दृष्टिकोणों को बहुत प्रयास की आवश्यकता होती है, इसलिए हम एक उपकरण बनाएंगे जो रनटाइम पर ऑब्जेक्ट की संरचना प्रदर्शित करेगा।
GitHub रिपॉजिटरी में उदाहरण के अनुसार, यदि आप TypeLayout.Print<NotAlignedStruct>()
समान कोड के साथ उपयोग करते हैं:
public struct NotAlignedStruct { public byte m_byte1; public int m_int; public byte m_byte2; public short m_short; }
निम्नलिखित आउटपुट दिखाई देगा, जो सटीक रूप से दिखाएगा कि CLR कैसे अनुकूलन और पैडिंग नियमों के आधार पर मेमोरी में संरचना की व्यवस्था करेगा।
Size: 12. Paddings: 4 (%33 of empty space) |================================| | 0: Byte m_byte1 (1 byte) | |--------------------------------| | 1-3: padding (3 bytes) | |--------------------------------| | 4-7: Int32 m_int (4 bytes) | |--------------------------------| | 8: Byte m_byte2 (1 byte) | |--------------------------------| | 9: padding (1 byte) | |--------------------------------| | 10-11: Int16 m_short (2 bytes) | |================================|
GitHub पृष्ठ पर कहा गया है , TUNE एक आशाजनक उपकरण है। यह आपको .NET इंटर्नल्स के बारे में जानने और C # कोड के साथ प्रयोग करके प्रदर्शन को बेहतर बनाने में मदद करेगा।
उनके बारे में विस्तृत जानकारी इस पोस्ट में मिल सकती है, लेकिन उच्च स्तर पर, यह इस प्रकार है :
- एक कार्यशील C # कोड उदाहरण लिखें जिसमें एक सार्वजनिक विधि के साथ कम से कम एक वर्ग होता है जो एक स्ट्रिंग पैरामीटर लेता है। रन बटन का उपयोग करके कोड लॉन्च किया गया है। आप किसी भी विधि और वर्ग को शामिल कर सकते हैं। लेकिन याद रखें कि पहले सार्वजनिक वर्ग से पहली सार्वजनिक विधि को कोड के तहत इनपुट विंडो से पहले पैरामीटर का उपयोग करके निष्पादित किया जाएगा;
- कोड को संकलित करने और निष्पादित करने के लिए रन बटन पर क्लिक करें। इसके अलावा, इसे संबंधित टैब में IL-code और कोडांतरक कोड में संकलित किया जाएगा;
- जबकि ट्यून चल रहा है (रनटाइम सहित), टूल एक ग्राफ बनाता है जो कचरा कलेक्टर डेटा प्रदर्शित करता है। इसमें पीढ़ी के आकार और कचरा संग्रह सत्र के बारे में जानकारी होती है (नीचे एक संख्या के साथ ऊर्ध्वाधर रेखाओं के रूप में प्रतिनिधित्व किया जाता है, जो इंगित करता है कि किस पीढ़ी में कचरा संग्रह किया जाता है)।
यह इस तरह दिखता है:

CLR मेमोरी डायग्नोस्टिक्स (ClrMD) टूल
अंत में, आइए उपकरणों की एक निश्चित श्रेणी पर एक नज़र डालें। .NET की रिलीज के बाद से, डेवलपर्स हमेशा .NET रनटाइम में क्या होता है, यह देखने के लिए WinDBG और SOS डिबगिंग एक्सटेंशन का उपयोग करने में सक्षम रहे हैं। हालांकि, ये पहले परिचित के लिए सबसे आसान उपकरण नहीं हैं और, जैसा कि अगले ट्वीट में कहा गया है, हमेशा सबसे अधिक उत्पादक नहीं होते हैं:
सौभाग्य से, Microsoft ने ClrMD पुस्तकालय ( Microsoft.Diagnostics.Runtime के रूप में भी जाना जाता है) उपलब्ध कराया, और अब कोई भी .NET प्रोग्राम के लिए मेमोरी डंप का विश्लेषण करने के लिए एक उपकरण बना सकता है। विस्तृत जानकारी आधिकारिक ब्लॉग में मिल सकती है। मैं ClrMD.Extensions पर भी एक नज़र डालने की सलाह देता हूं , जो "... LINPad के साथ एकीकरण प्रदान करता है और ClrMD का उपयोग करना आसान बनाता है । "
मैं सभी मौजूदा उपकरणों की एक सूची बनाना चाहता था और मदद के लिए ट्विटर पर कॉल किया। अपने आप को याद दिलाना: ट्वीट से सावधान रहें। WinDBG के लिए जिम्मेदार प्रबंधक उन्हें पढ़ सकते हैं और परेशान हो सकते हैं!
इनमें से अधिकांश उपकरण ClrMD के आधार पर काम करते हैं, क्योंकि यह सबसे आसान है। लेकिन अगर आप चाहें, तो आप सीधे COM इंटरफेस का उपयोग कर सकते हैं। यह भी ध्यान दिया जाना चाहिए कि कोई भी ClrMD-आधारित टूल क्रॉस-प्लेटफ़ॉर्म नहीं है , क्योंकि ClrMD स्वयं केवल Windows के लिए डिज़ाइन किया गया है। लिनक्स पर .NET कोर कोर डंप के विश्लेषण में क्रॉस-प्लेटफ़ॉर्म विकल्प वर्णित हैं।
अंत में, किसी तरह से संतुलन बनाए रखने के लिए, WinDBG का एक बेहतर संस्करण हाल ही में सामने आया, जिसे उन्होंने तुरंत कार्यक्षमता जोड़ने का प्रयास किया:
इन सभी शब्दों के बाद, सूची में जाएं:
- सुपरडंप ( GitHub )
- क्रैश डंप ( प्रस्तुति ) के स्वचालित विश्लेषण के लिए उपकरण
- msos ( जीथूब )
- एक कमांड लाइन इंटरफेस के साथ एक वातावरण जैसे कि एसओएस की अनुपस्थिति में एसओएस कमांड निष्पादित करने के लिए WinDbg।
- मेमोस्कोप.नेट ( गिटहब )
- .NET में प्रक्रिया मेमोरी का विश्लेषण करने के लिए एक उपकरण। आप एप्लिकेशन मेमोरी को फ़ाइल में डंप कर सकते हैं और इसे बाद में पढ़ सकते हैं।
- फ़ाइल में सभी डेटा (ऑब्जेक्ट) और थ्रेड्स (स्थिति, स्टैक, कॉल स्टैक) के बारे में जानकारी होती है। MemoScope.Net डेटा का विश्लेषण करेगा और आपको मेमोरी लीक और गतिरोध खोजने में मदद करेगा।
- dnSpy ( जीथूब )
- .NET असेंबली डीबगर और संपादक
- इसका उपयोग असेंबली को संपादित और डीबग करने के लिए किया जा सकता है, भले ही आपके पास स्रोत कोड न हो।
- मेमनलीज़र ( GitHub )
- प्रबंधित कोड के लिए एक स्मृति विश्लेषण उपकरण। एक कमांड लाइन इंटरफ़ेस है।
- जैसे
!DumpHeap
में !DumpHeap
निर्धारित कर सकता है कि कौन-सी वस्तुएँ बिना डिबगर को !DumpHeap
ढेर पर सबसे अधिक स्थान लेती हैं।
- DumpMiner ( GitHub )
- ट्रेस CLI ( GitHub )
- ऑपरेशन के दौरान डिबगिंग और ट्रैकिंग के लिए उपकरण
- शेड ( गिटहब )
- शेड एक एप्लिकेशन है जो .NET में एक प्रोग्राम के निष्पादन का विश्लेषण करता है। यह मालवेयर का विश्लेषण करने के लिए इस्तेमाल किया जा सकता है ताकि इस तरह के सॉफ्टवेयर लॉन्च होने पर क्या जानकारी संग्रहीत हो। शेड कर सकते हैं:
- प्रबंधित हीप में संग्रहीत सभी वस्तुओं को पुनः प्राप्त करें
- मेमोरी में संग्रहीत प्रदर्शन लाइनें;
- आगे की प्रक्रिया के लिए JSON प्रारूप में ढेर स्नैपशॉट बनाएं;
- मेमोरी में लोड सभी मॉड्यूल को डंप करें।
आप कई अन्य टूल पा सकते हैं जो ClrMD का उपयोग करते हैं । इसे उपलब्ध कराना Microsoft का एक अच्छा विचार था।
अन्य उपकरण
उल्लेख के लायक अन्य उपकरण:
- DebugDiag
- DebugDiag टूल को फ़्रीज, ख़राब प्रदर्शन, मेमोरी लीक या विखंडन जैसी समस्याओं के साथ-साथ उपयोगकर्ता-मोड प्रक्रियाओं (अब CLRMD एकीकरण के साथ) में विफलताओं को ठीक करने के लिए डिज़ाइन किया गया है।
- SOSEX (शायद अब विकसित नहीं हो रहा है)
- ... डिबगिंग प्रबंधित कोड के लिए एक एक्सटेंशन जो एसओएस के साथ मेरे असंतोष को कम करता है।
- Sysinternals से VMMap
- VMMap प्रक्रियाओं की आभासी और भौतिक स्मृति का विश्लेषण करने के लिए एक उपकरण है।
- मैंने इसका उपयोग सीएलआर में मेमोरी उपयोग का विश्लेषण करने के लिए किया था
