2010-07-10 13 views
13

ए नेट 4.0 ऐप उपयोगकर्ता के लिए क्रैश हो रहा है, लेकिन सिर्फ उसके लिए, मैं बग को पुन: पेश नहीं कर सका। उन्होंने विंडोज क्रैश रिपोर्टर द्वारा उत्पन्न WERInternalMetadata.xml फ़ाइल संलग्न की। इसे खोलकर मुझे पता चला कि यह System.IO.FileNotFoundException है जो सॉफ़्टवेयर को क्रैश करता है, हालांकि, उस फ़ंक्शन में कोई फ़ंक्शन नहीं कहा जाता है जो उस तरह के अपवाद को फेंक देगा, इसलिए समस्या कहीं और गहरी है।विंडोज क्रैश रिपोर्टर द्वारा उत्पन्न WERInternalMetadata.xml फ़ाइल का विश्लेषण कैसे करें?

यह फ़ाइल का "सबसे दिलचस्प" हिस्सा है। इसमें (हेक्साडेसिमल) संख्याएं हैं, लेकिन मुझे पता नहीं चला कि उनका क्या मतलब है।

<ProblemSignatures> 
    <EventType>CLR20r3</EventType> 
    <Parameter0>rstvshowtracker.exe</Parameter0> 
    <Parameter1>1.0.3842.33258</Parameter1> 
    <Parameter2>4c374e79</Parameter2> 
    <Parameter3>mscorlib</Parameter3> 
    <Parameter4>4.0.0.0</Parameter4> 
    <Parameter5>4ba1da6f</Parameter5> 
    <Parameter6>1620</Parameter6> 
    <Parameter7>14</Parameter7> 
    <Parameter8>System.IO.FileNotFoundException</Parameter8> 
</ProblemSignatures> 

वहाँ जो कोड अपवाद का कारण बनता है, या कम से कम बाहर FileNotFoundException से कुछ और जानकारी खोजने के लिए पता लगाने के लिए एक तरीका है?

उत्तर

17

सबसे पहले, यहाँ क्या है कि WER का पता लगाने में है:

<Parameter0>rstvshowtracker.exe</Parameter0> - your exe 
<Parameter1>1.0.3842.33258</Parameter1> - version of your exe 
<Parameter2>4c374e79</Parameter2> - exe timestamp 
<Parameter3>mscorlib</Parameter3> - assembly/module 
<Parameter4>4.0.0.0</Parameter4> - assembly version 
<Parameter5>4ba1da6f</Parameter5> - assm timestamp 
<Parameter6>1620</Parameter6> - methodDef token of faulting method 
<Parameter7>14</Parameter7> - IL offset of faulting instruction 
<Parameter8>System.IO.FileNotFoundException</Parameter8> - exception 

आप WinDBG और एसओएस पता लगाने के लिए क्या है कि विधि है इस्तेमाल कर सकते हैं (उदाहरण के लिए 1620)। यह कैसे करना है, यहाँ उदाहरण देखें: http://blogs.msdn.com/b/oanapl/archive/2009/01/30/windows-error-reporting-wer-and-clr-integration.aspx

... या फिर, आप ऊपर unhandledException घटना अपने आवेदन में हुक सकता है, और एक लॉग फ़ाइल के लिए बाहर अपवाद स्टैक ट्रेस प्रिंट, देखने के लिए समस्या का कारण ; जैसे

static void MyHandler(object sender, UnhandledExceptionEventArgs args) 
{ 
    Exception e = (Exception) args.ExceptionObject; 
    // print out the exception stack trace to a log 
} 

public static void Main() 
{ 
    AppDomain currentDomain = AppDomain.CurrentDomain; 
    currentDomain.UnhandledException += new UnhandledExceptionEventHandler(MyHandler); 
} 
+2

बहुत बहुत धन्यवाद! मैं फर्जी कोड का पता लगाने में सक्षम था। दूसरी तरफ, मैं UnhandledException घटना को पकड़ रहा हूं, लेकिन अगर किसी नए थ्रेड पर अपवाद फेंक दिया जाता है, तो ऐप फ्रीज हो जाता है और कोई अनचाहे अपवाद नहीं निकालता है। नए संस्करण में मैंने थ्रेड के बजाए कार्य का उपयोग करके इसे ठीक किया, क्योंकि कार्य मुझे किसी अन्य धागे पर फेंकने वाले अपवादों को पकड़ने देता है। – RoliSoft

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

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