2011-09-25 19 views
6

में ऑब्जेक्ट्स इनसाइड हीप एंड स्टैक के अंदर कैसे देख सकता हूं निष्पादन की प्रत्येक पंक्ति के बाद स्टैक और ढेर की सामग्री देखना संभव है। मैं इसे देखना चाहता हूं क्योंकि यह स्मृति आवंटन और डेलोकेशन के बारे में स्पष्ट विचार देगा। नेट। आपकेमैं सी # .NET

यदि कोई दस्तावेज़ या लिंक जो आपके उत्तर के साथ मेरे संदेह को साफ़ करेगा कृपया साझा करें।

+1

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

+0

निश्चित रूप से, मैं निश्चित रूप से अब यह करूँगा – funsukvangdu

उत्तर

2

एसओएस या PssCorWinDbg के साथ-साथ शुरू करने के लिए एक अच्छी जगह है।

एक बार जब आप इसे हल कर लेंगे; अपनी प्रक्रिया में WinDbg संलग्न करें, डीबगर एक्सटेंशन लोड करें। उदाहरण के लिए:

.load C:\pathtoextensions\psscor4.dll 

उसके बाद, आप !dumpheap या !dumpstack आदेश जारी कर सकते हैं।

इन दोनों आदेशों का आउटपुट बहुत कच्चा है। !dumpheap -stat आपको अपने ढेर का "सांख्यिकीय" अवलोकन देगा। सभी आवंटन के लिए कुल प्रकार, आवंटित संख्या, और बाइट्स।

यह एक सुपर सीधा काम नहीं है। WinDbg के साथ पर्याप्त अभ्यास करने में कुछ समय लगेगा यदि आपने पहले इसका उपयोग नहीं किया है।

आप क्या कर सकते हैं !bpmd का उपयोग कर एक विधि पर ब्रेकपॉइंट सेट करें, और ऊपर वर्णित आदेशों का उपयोग करें, फिर p कमांड का उपयोग करके चरणबद्ध करें, और आदेशों को फिर से चलाएं।

मुझे यकीन है कि ANTS Profiler या dotTrace जैसे अन्य वाणिज्यिक उपकरण हैं जो काम पूरा कर सकते हैं - लेकिन मेरे पास उपकरण के साथ बहुत अधिक अनुभव नहीं है।

एक बार जब आप शुरू कर लेते हैं, तो आप एसओएस या Psscor के बारे में (नए) अधिक विशिष्ट प्रश्न पूछ सकते हैं।

3

ढेर:

var stackInfo = new StackTrace(); 

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