संभव डुप्लिकेट:
incorrect stacktrace by rethrowफेंक; स्टैक ट्रेस रीसेट नहीं करने के लिए कहा जाता है, लेकिन यह कुछ निश्चित परिस्थितियों
यह आम तौर पर स्वीकार किया जाता है कि .NET में throw;
स्टैक ट्रेस रीसेट नहीं करता, लेकिन throw ex;
करता है।
void Main()
{
try
{
try
{
Wrapper(); // line 13
}
catch(Exception e)
{
Console.WriteLine(e.ToString());
throw; // line 18
}
}
catch(Exception e)
{
Console.WriteLine(e.ToString());
}
}
public void Wrapper()
{
Throw(); // line 28
}
public void Throw()
{
var x = (string)(object)1; // line 33
}
उत्पादन होता है:
System.InvalidCastException: करने के लिए प्रकार की वस्तु 'System.Int32' कास्ट करने में असमर्थ
हालांकि, इस साधारण प्रोग्राम में, मैं अलग लाइन नंबर मिल 'System.String' टाइप करें। ConsoleApplication2.Program.Main पर (String [] args) C: \ लंबी पथ \ Program.cs: लाइन 13
System.InvalidCastException: प्रकार की वस्तु कास्ट करने के लिए 'System.Int32' टाइप करने में असमर्थ 'सिस्टम .String '। ConsoleApplication2.Program.Main पर (String [] args) C: \ लंबी पथ \ Program.cs: लाइन 18
नोट: पहले स्टैक ट्रेस लाइन 13 होता है, दूसरा इसके अतिरिक्त लाइन 18. शामिल , न तो लाइन 13 और न ही लाइन 18 लाइनें हैं जहां कास्ट वास्तव में हो रहा है।
मेरा प्रश्न अब है: किस परिस्थितियों में throw;
स्टैक ट्रेस बदलता है और किस परिस्थिति में यह स्टैक ट्रेस बदलता नहीं है?
कृपया ध्यान दें, कि यह पहले से ही been observed है, लेकिन सामान्य रूप से उत्तर नहीं दिया गया है।
अद्यतन:
मैं डीबग मोड में उपरोक्त कोड भाग गया और यह इस पैदावार:
System.InvalidCastException: प्रकार की वस्तु कास्ट करने के लिए 'System.Int32' टाइप करने के लिए 'में असमर्थ System.String '। कंसोल अनुप्रयोग में कंसोल एप्लाइंस 2.प्रोग्राम। थ्रो() में सी: \ लांग-पथ \ प्रोग्राम सीएस: लाइन 33 कंसोल एप्प्लिकेशन 2.प्रोग्राम। रैपर() में सी: \ लांग-पथ \ प्रोग्राम.cs: लाइन 28 कंसोल अनुप्रयोग 2 पर। कार्यक्रम। मुख्य (स्ट्रिंग [] args) सी: \ long-path \ program.cs: लाइन 13
सिस्टम। इन्वालिड कैस्ट अपवाद: 'System.String' टाइप करने के लिए 'System.Int32' प्रकार की ऑब्जेक्ट डालने में असमर्थ। कंसोल अनुप्रयोग में कंसोल एप्लाइंस 2.प्रोग्राम। थ्रो() में सी: \ लांग-पथ \ प्रोग्राम सीएस: लाइन 33 कंसोल एप्प्लिकेशन 2.प्रोग्राम। रैपर() में सी: \ लांग-पथ \ प्रोग्राम.cs: लाइन 28 कंसोल अनुप्रयोग 2 पर। Program.Main सी में (String [] args): \ लंबी पथ \ Program.cs: लाइन 18
कृपया ध्यान दें: अंतिम पंक्ति संख्या अब भी कोई परिवर्तन
यह आपके द्वारा प्रदान किए गए कोड के स्निपेट से संबंधित अपवादों में विस्तृत लाइन संख्याओं की विस्तृत सहायता करेगा ... –
@ पीटररची: हो गया। –