2010-10-18 5 views
7

मैं यह निर्धारित करने की कोशिश कर रहा हूं कि एक प्रक्रिया क्यों लटक रही है और Process Explorer, Process Monitor, और WinDbg जैसे विभिन्न उपकरणों के बारे में सीख रहा हूं।मैं WinDbg कैसे सीख सकता हूं? (पुन: प्रतीत होता है कि सरल लटका प्रक्रिया)

वैसे भी, मैं WinDbg उपयोग करने के लिए कोशिश कर रहा हूँ और मेरी प्रक्रिया के लिए संलग्न के बाद, डिबगर इस कहते हैं:

FAULTING_IP: 
ntdll!DbgBreakPoint+0 
77c18b2e cc    int  3 

मैं:

(1e9c.1128): Break instruction exception - code 80000003 (first chance) 
eax=7ffda000 ebx=00000000 ecx=00000000 edx=77c5c964 esi=00000000 edi=00000000 
eip=77c18b2e esp=0543ff5c ebp=0543ff88 iopl=0   nv up ei pl zr na pe nc 
cs=001b ss=0023 ds=0023 es=0023 fs=003b gs=0000    efl=00000246 
ntdll!DbgBreakPoint: 
77c18b2e cc    int  3 

अगर मैं !analyze -v चलाने के लिए, यह इस प्रदर्शित करता है मैं एक सॉफ्टवेयर डेवलपर (वीबीएनईटी/सी #) के साथ इस डिबगिंग के स्तर में कोई अनुभव नहीं है, इसलिए मुझे यकीन नहीं है कि मैं क्या कर रहा हूं, लेकिन ऐसा लगता है कि WinDbg मेरी प्रक्रिया से जुड़ा हुआ है और फिर तुरंत तोड़ रहा है। फिर, जब मैं एक विश्लेषण करता हूं तो यह सोचता है कि ब्रेकपॉइंट (जिसे यह अभी सेट किया गया है) एप्लिकेशन के साथ समस्या है?

मुझे WinDbg का उपयोग केवल प्रक्रिया से जोड़ने और इसका विश्लेषण करने के लिए कैसे किया जाना चाहिए?

(इसके अलावा, वहाँ डिबगिंग और WinDbg के इस स्तर के साथ शुरू हो रही है के लिए किसी भी अच्छी किताबें/ट्यूटोरियल हैं?)

उत्तर

9

WinDbg एक उपयोगकर्ता और कर्नेल मोड डीबगर है, लेकिन अपने आप पर यह वास्तव में प्रबंधित कोड को समझ में नहीं आता है और !analyze कमांड सीमित उपयोग का है। यदि आप WinDbg का उपयोग करके प्रबंधित अनुप्रयोगों को डीबग करना चाहते हैं, तो आपको WinDbg प्रबंधित कोड की आंतरिक संरचनाओं को समझने के लिए कुछ तरीका चाहिए। वहां कई एक्सटेंशन डीएलएल हैं जो इसे सक्षम करते हैं। Sos.dll के साथ .NET फ्रेमवर्क जहाजों और psscor2.dll और sosex.dll जैसे डाउनलोड हैं।

एसओएस और पीएसएससीओआर 2 समान सुविधाओं को कम या कम प्रदान करते हैं जबकि एसओएसईएक्स प्रबंधित डिबगिंग के लिए नई विशेषताएं जोड़ता है। इनमें से प्रत्येक के लिए WinDbg से उपलब्ध फ़ाइलों के लिए सहायता फ़ाइलें उपलब्ध हैं। जैसे एसओएस के लिए सहायता प्राप्त करने के लिए आप !sos.help कमांड का उपयोग कर सकते हैं।

आपको WinDbg के साथ प्रबंधित अनुप्रयोग को डीबग करने के लिए या तो एसओएस या पीएसएससीओआर 2 और संभवतः एसओएसईएक्स लोड करना होगा। जैसेयदि आप एसओएस लोड करना चाहते हैं तो आप इस

.loadby sos clr

इस तरह लोड आदेश का उपयोग .NET रनटाइम के स्थान से एसओएस लोड होगा। कृपया ध्यान दें कि रनटाइम को सिल्वरलाइट में .NET 2 और coreclr में mscorwks कहा जाता है, इसलिए यदि आप इनमें से किसी एक का उपयोग कर रहे हैं, तो आपको तदनुसार .loadby कमांड बदलना होगा।

WinDbg को अतिरिक्त जानकारी प्रदर्शित करने के लिए प्रतीकों की आवश्यकता है। यह अप्रबंधित कोड के लिए विशेष है। आप WinDbg को Microsoft के प्रतीक सर्वर से आवश्यक प्रतीकों को पुनर्प्राप्त करने के लिए .symfix कमांड का उपयोग कर सकते हैं।

चूंकि आपका आवेदन लटक रहा है, तो एक अच्छा मौका है कि आपके पास एक या अधिक अवरुद्ध धागे होंगे। आप !threads (या केवल !t) कमांड का उपयोग कर प्रबंधित थ्रेड देख सकते हैं। .NET सरल ताले सिंकब्लॉक नामक संरचना का उपयोग करके आंतरिक रूप से कार्यान्वित किए जाते हैं। आप इन्हें !syncblk कमांड का उपयोग करके देख सकते हैं। यदि आपने SOSEX लोड किया है तो !dlk कमांड स्वचालित रूप से डेडलॉक्स का पता लगा सकता है।

यदि आप अधिक जानकारी चाहते हैं, तो कुछ किताबें और कुछ ब्लॉग पढ़ने के लिए हैं।

पुस्तकें:

  • Advanced .NET Debugging मारियो हेवार्डट द्वारा। एक ही लेखक से native debugging पर एक पुस्तक भी है।
  • Debugging Microsoft .NET 2.0 Applications जॉन रॉबिन्स
  • CLR via C# जेफरी रिचटर द्वारा सीएलआर के आंतरिक लोगों के लिए एक उत्कृष्ट परिचय है।

ब्लॉग:

  • Tess' blog महान है। इसमें कई ट्यूटोरियल और प्रयोगशालाएं हैं जिनका आप अभ्यास करने के लिए उपयोग कर सकते हैं।
  • Tom's blog भी बहुत उपयोगी है।

वीडियो:

  • मैं डेनमार्क में माइक्रोसॉफ्ट विकास केंद्र में कामयाब रहे डिबगिंग के बारे में एक प्रस्तुति से किया था। चैनल पी पर वीडियो उपलब्ध हैं। Part 1 और part 2
5

टेस Ferrandez 'ब्लॉग नेट WinDbg सामग्री के लिए एक शानदार संसाधन है:

If broken it is, fix it you should

उसके लेख से कई को लक्षित IIS/ASP.NET वर्कर प्रोसेस दुर्घटना, रुक जाता है और लीक हालांकि, तकनीक का सबसे परिदृश्यों के सभी प्रकार के लिए लागू किया जा सकता है।

+0

+1 टेस परिचय स्तर डीबगिंग के लिए एक महान संसाधन है। – Mike

5

Advanced Windows Debugging एक अच्छी शुरुआत होगी।

जब विंडबग एक प्रक्रिया से जुड़ा होता है, तो यह एक थ्रेड इंजेक्ट करता है जो डीबीजीब्रैकपॉइंट को कॉल करता है। यही वह है जो आप देख रहे हैं। आप चल रहे धागे को देखने के लिए ~ और फिर ~ n को एक अलग थ्रेड पर स्विच करने के लिए उपयोग कर सकते हैं। के आपको वर्तमान धागे का एक स्टैक ट्रेस देगा, जो आपको लटकने का कुछ विचार देना चाहिए।

3

इंट 3 निर्देश (बाइनरी में सीसी) एक अनुप्रयोग में ब्रेक पॉइंट सेट करने वाले तरीकों में से एक है। यह निर्देश एक बाधा उत्पन्न करता है जो प्रोग्राम के निष्पादन को रोकता है और डीबगर को इस बाधा को प्रतिक्रिया देने का मौका देता है। जब तक आप अपना प्रोग्राम लटका रहे हैं, तब तक आपको निष्पादन जारी रखने का चयन करना होगा।