2009-01-31 6 views
14

विंडबग और रनिंग का उपयोग करते समय! ऑब्जेक्ट्स के पते देखने के लिए डंपहेप कमांड, आप किसी विशिष्ट संख्या में ऑब्जेक्ट्स को कैसे सीमित कर सकते हैं। मुझे मिला एकमात्र तरीका CTRL + BREAK और ब्लॉग http://dotnetdebug.net/2005/07/04/dumpheap-parameters-and-some-general-information-on-sos-help-system/सीमा! डंपेप (विंडबैग) आउटपुट एन ऑब्जेक्ट्स

-l X पर एक कमांड लाइन का उपयोग कर रहा था - सभी ऑब्जेक्ट्स के बजाय प्रत्येक ढेर से केवल एक्स आइटम प्रिंट करता है।

जाहिर -l नहीं रह गया है SOS.dll

+1

मैं जानता हूँ कि यह एक पुराने सवाल यह है कि देता है के साथ आदेश चला है, लेकिन आप के लिए प्रबंधन कैसे किया एक जवाब पता है? –

उत्तर

5

में मौजूद है कि आप वास्तव में देख रहे क्या? व्यक्तिगत वस्तुओं को देखने से पहले, ब्याज के क्षेत्र को सीमित करना सामान्य है।

-स्टैट स्विच ढेर पर वस्तुओं के प्रति प्रकार, सारांश दिखाता है।

dumpHeap [-stat] [सफाई MIN] [- अधिकतम] [-thinlock] [-mt] [प्रकार] [शुरू [अंत]]

  • -stat विकल्प उत्पादन को प्रतिबंधित करता है सांख्यिकीय प्रकार सारांश के लिए।
  • -min विकल्प उन ऑब्जेक्ट्स को अनदेखा करता है जो बाइट्स में निर्दिष्ट आकार पैरामीटर से कम हैं।
  • -मैक्स विकल्प बाइट्स में निर्दिष्ट आकार पैरामीटर से बड़े ऑब्जेक्ट को अनदेखा करता है।
  • -थिनॉक विकल्प ThinLocks की रिपोर्ट करता है। अधिक जानकारी के लिए, SyncBlk कमांड देखें।
  • -एमटी विकल्प केवल उन ऑब्जेक्ट्स को सूचीबद्ध करता है जो विधि विधि संरचना निर्दिष्ट करने के अनुरूप हैं।
  • -टाइप विकल्प केवल उन ऑब्जेक्ट्स को सूचीबद्ध करता है जिनके प्रकार का नाम निर्दिष्ट स्ट्रिंग का एक सबस्ट्रिंग मैच है।

प्रारंभ पैरामीटर निर्दिष्ट पते से लिस्टिंग शुरू होता है। अंतिम पैरामीटर निर्दिष्ट पते पर लिस्टिंग रोकता है।

Ref

+0

मैं व्यक्तिगत वस्तुओं की तलाश में हूं। -स्टैट -min 100 -मैक्स 150 मुझे 150 के + छोटी वस्तुओं को दिखाता है। –

+9

मान लीजिए कि आपके पास 150k प्रविष्टियां एक ही आकार और प्रकार (जैसे मेरे मामले में) हैं - आप पृथ्वी पर कैसे एक के एक पते को ढूंढ सकते हैं? यदि आप पूरी सूची को मुद्रित करते हैं तो आप अगले 30 मिनट (प्रक्रिया को मारने के अलावा) में सूची को बाधित करने का तरीका है। – bitbonk

6

आप किस मानदंड को आउटपुट की संख्या सीमित करना चाहते हैं? -l विकल्प लाइन संख्याओं के अनुसार आउटपुट को सीमित करता है। यह बेकार है: मान लीजिए कि यह केवल पहली 10 ऑब्जेक्ट्स दिखाता है, हो सकता है कि आप जिस वस्तु को खोज रहे हैं वह भी सूचीबद्ध नहीं है।

यदि आउटपुट WinDbgs आउटपुट विंडो के लिए बहुत लंबा है, तो ऑब्जेक्ट को फ़ाइल में डंप करने के लिए .logopen का उपयोग करें और फिर टेक्स्ट एडिटर के साथ फ़ाइल की समीक्षा करें।

आप अन्य विचारों कैसे अपने वस्तु की तरह लग रहा है, तो आप सभी वस्तुओं

.foreach (obj { !dumpheap -short -type MyType}) 

और फिर या नहीं, अपने वस्तु इस मापदंड से मेल खाने .if साथ तय पर एक पाश प्रदर्शन कर सकते हैं।

उदाहरण के तौर पर, मैं एक घास के मैदान में एक सुई की तलाश में था। मैं एक कार्यक्रम में एक विशिष्ट हैशटेबल खोज रहा था जिसमें ढेर पर 3000 से अधिक हैशटेबल्स थे। आदेश मैं उपयोग करने का प्रयास

.foreach (obj { !dumpheap -short -type Hashtable }) {.if (poi(poi(${obj}+1c)) > 100) {!do ${obj}} } 

1C hashtable की गिनती के सदस्य की ऑफसेट है था।

100 हैशटेबल कम से कम होने की अपेक्षा की जाने वाली वस्तुओं की संख्या है।

दुर्भाग्य से यह तुरंत हैशटेबल्स के लिए काम नहीं करता है, क्योंकि !dumpheap -type ने हैशटेबलएनेमेटर्स को भी सूचीबद्ध किया है जो किसी भी तरह डीबगर को दुर्घटनाग्रस्त कर देता है।

hashtables केवल डंप करने के लिए, !dumpheap -stat चलाने के लिए और hashtables की विधि तालिका यह पता लगाने और -type <classname> के बजाय -mt <methodtable>, जो

.foreach (obj { !dumpheap -short -mt <MT of Hashtable> }) {.if (poi(poi(${obj}+1c)) > 100) {!do ${obj}} } 
+1

भावी पाठकों के लिए: आपको विधि तालिका पते के साथ '-mt' का उपयोग करने में सक्षम होना चाहिए 'हैशटेबल' का। आपको '! Dumpheap -stat' चलाकर वह जानकारी मिलती है और फिर विधि तालिका पते के लिए' हैशटेबल 'की तलाश करें। – xxbbcc

+0

@xxbbcc: आप सही हैं। इस बीच मैं इसका भी उपयोग करता हूं। उत्तर अपडेट किया गया। –

+0

अद्यतन के लिए धन्यवाद। आपका जवाब स्मृति रिसाव को ट्रैक करने में बहुत मददगार था। – xxbbcc

 संबंधित मुद्दे

  • कोई संबंधित समस्या नहीं^_^