2011-01-15 20 views
45

में डंप फ़ाइलों को डीबग करना मैं विजुअल स्टूडियो 2010 व्यावसायिक संस्करण और विंडोज विस्टा का उपयोग कर रहा हूं।विजुअल स्टूडियो

सबसे पहले, मेरे पास यह कोड है। जैसा कि आप देख सकते हैं, यह कार्यक्रम को दुर्घटनाग्रस्त कर देगा!

using System; 

namespace Crash 
{ 
    class Program 
    { 
     static void Main(string[] args) 
     { 
      string a = null; 

      if (a.Length == 12) 
      { 
       // ^^ Crash 
      } 
     } 
    } 
} 

कार्यक्रम अगर कथन पर क्रैश हो जाएगा। अब, मैं यह जानना चाहता हूं कि अगर कथन पर यह दुर्घटनाग्रस्त हो गया।

यदि मैं विजुअल स्टूडियो से "डिबगिंग के बिना प्रारंभ करें", तो Crash.exe क्रैश हो जाता है। यह 1,356 केबी स्मृति का उपयोग करता है। मुझे क्लोज प्रोग्राम/डीबग का Vista विकल्प मिलता है। अगर मैं डीबग चुनता हूं, तो मैं विजुअल स्टूडियो का एक नया उदाहरण खोल सकता हूं, और यह मुझे कथन पर NullReferenceException पर इंगित करता है। यह अच्छा है।

अब मुझे लगता है कि यह किसी अन्य कंप्यूटर पर दुर्घटनाग्रस्त हो जाता है, और मैं उन्हें कार्य प्रबंधक के माध्यम से एक डंप फ़ाइल देने के लिए मिलता हूं। यह 54,567 केबी है। इतना बड़ा क्यों! यह विशाल है!

Microsoft (R) Windows Debugger Version 6.12.0002.633 X86 
Copyright (c) Microsoft Corporation. All rights reserved. 


Loading Dump File [C:\Users\Richard\Desktop\Crash.DMP] 
User Mini Dump File with Full Memory: Only application data is available 

Symbol search path is: SRV*C:\SYMBOLS*http://msdl.microsoft.com/download/symbols 
Executable search path is: 
Windows Server 2008/Windows Vista Version 6002 (Service Pack 2) MP (4 procs) Free x86 compatible 
Product: WinNt, suite: SingleUserTS Personal 
Machine Name: 
Debug session time: Sat Jan 15 11:07:36.000 2011 (UTC + 0:00) 
System Uptime: 0 days 4:24:57.783 
Process Uptime: 0 days 0:00:05.000 
........................ 
eax=002afd40 ebx=77afa6b4 ecx=002afd48 edx=00000001 esi=001cdaa4 edi=00000000 
eip=77bf5e74 esp=001cda5c ebp=001cdacc iopl=0   nv up ei ng nz ac pe cy 
cs=001b ss=0023 ds=0023 es=0023 fs=003b gs=0000    efl=00000297 
ntdll!KiFastSystemCallRet: 
77bf5e74 c3    ret 

बहरहाल, यह मेरे लिए कम ब्याज की है: वैसे भी, मैं कम है कि में रुचि (थोड़ा)

अगर मैं Windbg साथ कि डंप खोलते हैं, तो मैं उपयोग की बहुत कम मेरी अप्रशिक्षित आँख करने के लिए मिल कर रहा हूँ । जहां तक ​​मैं कह सकता हूं, मुझे उपयोगी आउटपुट प्राप्त करने के लिए कमांड लिखना होगा, और विजुअल स्टूडियो बेहतर होगा।

तो मैं इसे विजुअल स्टूडियो के साथ खोलता हूं। मैं "केवल मूल के साथ डीबग" चुन सकता हूं, लेकिन मुझे बहुत सारी चीजें मिलती हैं जिसका अर्थ है आपके जैसे लोगों को चतुर करने के लिए, और मैं चालाक नहीं हूं! मैं इन दो स्क्रीन मिलती है:

enter image description here

enter image description here

तो, मेरे सवाल:

मैं कैसे दृश्य स्टूडियो मेरी स्रोत कोड के लिए दिखाते हैं?

इसके अलावा, क्या एक छोटी डंप फ़ाइल प्राप्त करने का कोई तरीका है? यह संपीड़न के बाद भी हास्यास्पद रूप से बड़ा लगता है। मुझे समझ में नहीं आ रहा है कि क्यों ऐसा नहीं हो सकता है जो प्रोग्राम के पदचिह्न से केवल थोड़ा बड़ा है, और फिर भी स्रोत कोड के साथ एक अच्छा डिबगिंग मिलता है।

+0

क्या आप विजुअल स्टूडियो में डिबगर से परिचित हैं? मैंने वास्तव में आपके प्रश्न के निचले हिस्से में सभी तरह से पढ़ा नहीं था, लेकिन यह स्पष्ट नहीं है कि यह आपके लिए क्यों काम नहीं करता है। –

+1

सभी ईमानदारी में, मैं इससे परिचित नहीं हूं, यही कारण है कि मैं यहां आया था। कहीं भी "लोड स्रोत" बटन होना चाहिए, लेकिन क्या मुझे यह मिल सकता है ... – niemiro

उत्तर

41

विज़ुअल स्टूडियो 2010 आपको क्रैश डंप फ़ाइलों को डीबग करने और प्रबंधित स्रोत कोड के माध्यम से कदम उठाने की अनुमति देता है, यह एक गॉचा के साथ आता है: यह only for .NET 4.0 assemblies काम करता है। ये कदम उठाएँ:

  1. कार्य प्रबंधक
  2. ओपन VS2010
  3. ओपन .dmp फ़ाइल में समाधान का उपयोग कर किसी अन्य कंप्यूटर पर एक क्रैश डंप फ़ाइल बनाएँ (फ़ाइल> खोलें ...)
  4. Debug With Mixed पर क्लिक करें (यह केवल .NET 4 के लिए दृश्यमान होगा।0)
  5. स्रोत कोड खुल जाएगा और आप जहां तक ​​देशी केवल संबंध है दृश्य स्टूडियो के साथ डिबगिंग के रूप में सही कारण और अपवाद

के स्थान का निरीक्षण करने में सक्षम हो जाएगा WinDbg से अधिक नहीं उपयोगी है।

+0

क्या यह काम भी करेगा यदि डंप उत्पन्न होने पर डीएल को देशी एप्लिकेशन में इंजेक्शन दिया गया था और आप यह जानना चाहते हैं कि डीएल दुर्घटनाग्रस्त क्यों हो? बेशक डीएलएल .net4 + है। – Guapo

+1

मुझे भी एक ही समस्या का सामना करना पड़ रहा है, लेकिन मैं विजुअल स्टूडियो में स्रोत कोड नहीं देख सकता। मैं नेट 4.5 और वीएस 15 का उपयोग कर रहा हूं। वीएस –

5

आपको डीबगर को संबंधित पीडीबी (प्रोग्राम डेटाबेस) फ़ाइल की आपूर्ति करनी चाहिए ताकि यह प्रतीकों को लोड कर सके। बेहतर दृश्य प्राप्त करने के लिए, माइक्रोसॉफ्ट पब्लिक सिंबल सर्वर का उपयोग करें। This article पर जानकारी है।

38

आपके द्वारा उपयोग किए जा रहे टूलिंग को कभी भी क्रैशिंग प्रबंधित प्रोग्राम की समस्या निवारण के लिए डिज़ाइन नहीं किया गया था। Minidumps और Windbg वह है जो आप सी या सी ++ में लिखे गए कोड के साथ क्या गलत है यह जानने के लिए उपयोग करते हैं। बहुत महत्वपूर्ण उपकरण, ये ऐसी भाषाएं हैं जिनके रनटाइम्स के पास क्रैशिंग प्रबंधित प्रोग्राम से बाहर निकलने वाली उपहारों के लिए कोई समर्थन नहीं है। एक स्टैक ट्रेस के साथ एक अपवाद की तरह।

मिनीडम्प आकार मिनी के कारण मिनीडम्प आकार इतना अलग है। डिजाइन द्वारा, यह प्रक्रिया के एक छोटे स्नैपशॉट को पकड़ने के लिए था। प्रासंगिक तर्क MiniDumpWriteDump function में डंपटाइप है। इस फ़ंक्शन में वास्तव में चालाक कोड है जो यह पता लगा सकता है कि प्रक्रिया स्थिति के किन हिस्सों को रिकॉर्ड करने की आवश्यकता नहीं है क्योंकि आप इसे डीबगर सत्र में उपयोग करने की संभावना नहीं रखते हैं। जो आप अतिरिक्त डंप प्रकार झंडे प्रदान करके ओवरराइड कर सकते हैं। एक्सप्लोरर जेनरेट करने वाले मिनीडम्प में उन सभी झंडे चालू हैं, आपको पूरी किट और कैबूडल मिलती है।

जो वास्तव में एक प्रबंधित कार्यक्रम के लिए बहुत महत्वपूर्ण है। इस मिनीडम्प निर्माता द्वारा उपयोग की जाने वाली हेरिस्टिक एक ऐसा है जो अप्रबंधित कोड के लिए उपयुक्त है। एक प्रबंधित प्रोग्राम डंप को डिबग करना केवल तभी काम करता है जब आप डंप में पूरे कचरा एकत्रित ढेर शामिल करते हैं। हां, यह एक बड़ा डंप होगा, मिनी अब और लागू नहीं होता है।

आपकी अगली समस्या यह है कि आपको मिनीडिम्प डेटा से मशीन दृश्य की आत्मा मिल रही है। आपकी स्क्रीन शॉट मशीन कोड दिखा रहे हैं। आप उन शॉट्स में विंडोज के अंदर स्थित होने के लिए होते हैं, ध्यान दें कि कैसे ntdll.dll ढेर के शीर्ष पर है। Mscorwks.dll प्रविष्टियां सीएलआर हैं। आगे, बाहर देखने के लिए, आपको अपने कोड से ढेर फ्रेम देखना चाहिए। हालांकि आप जेआईटी कंपाइलर द्वारा जेनरेट किए गए मशीन कोड को देखेंगे। आपका सी # कोड नहीं है।

वहाँ एक विंडबग ऐड-इन है जिसे sos.dll कहा जाता है जो प्रबंधित डेटा का निरीक्षण करने में सक्षम होने के लिए विंडबग के कमांड सेट को बढ़ाता है। अच्छी हिट पाने के लिए बस "sos.dll" google। हालांकि यह अभी भी looong तरीका है जो आपको विजुअल स्टूडियो डीबगर से बाहर निकलने वाले डिबग अनुभव से दूर है। जो प्रबंधित कोड के बारे में जानबूझकर जागरूक है, विंडबग या वीएस डीबगर के विपरीत बहुत कम है जो मिनीडंप लोड कर सकता है। एसओएस वास्तव में सीएलआर कीड़े की समस्या निवारण के लिए डिज़ाइन किया गया था।

अब आप देखे गए मिनीडम्प जानकारी पृष्ठ के अलावा VS2010 में कोई नाटकीय सुधार नहीं थे। जो वास्तव में बहुत कुछ नहीं करता है। मुझे संदेह है कि डीबगर टीम को अपनी टोडो सूची में रखना है, निश्चित रूप से कुछ मौलिक समस्याएं दूर करने के लिए निश्चित हैं। विशेष रूप से minidump प्रारूप और निर्माण कोड में। प्रतिक्रिया प्रदान करने के लिए connect.microsoft.com का उपयोग करें, वे इसका ध्यान देते हैं और वोटों को उनकी प्राथमिकता सूची को प्रभावित करते हैं।

+0

में डंप फ़ाइल के साथ स्रोत कोड प्राप्त करने के लिए कृपया मुझे कुछ सेटअप के साथ मार्गदर्शन कर सकते हैं धन्यवाद! आपने मुझे इतना सिखाया है। मैं वास्तव में, वास्तव में सराहना करता हूं कि आपने मेरे लिए क्या किया है। मेरी मदद करने के लिए समय निकालने के लिए बहुत बहुत धन्यवाद। मैं "जवाब के रूप में चिह्नित" स्विचिंग करता रहता हूं! इतने सारे शानदार जवाब (ठीक है, यह आपके लिए है!) बहुत बहुत धन्यवाद, फिर से! – niemiro

+3

@ हर कोई: कृपया इसके लिए बहुत सारे अपवॉट्स दें ताकि मैं केवल एक पोस्ट को उत्तर के रूप में चिह्नित कर सकूं! – niemiro

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