मैं हमेशा "फेंक" और "फेंक पूर्व" was that throw alone wasn't resetting the stacktrace of the exception.क्या एक callstack पुनर्स्थापित करने के लिए
दुर्भाग्य के बीच का अंतर सोचा है (मैं "फेंक", नहीं "फेंक पूर्व" उपयोग कर रहा हूँ) फेंक नेतृत्व कर सकते हैं, कि है मैं जिस व्यवहार का अनुभव कर रहा हूं वह नहीं; यहां एक साधारण नमूना है जो मेरी समस्या का पुनरुत्पादन करता है:
using System;
using System.Text;
namespace testthrow2
{
class Program
{
static void Main(string[] args)
{
try
{
try
{
throw new Exception("line 14");
}
catch (Exception)
{
throw; // line 18
}
}
catch (Exception ex)
{
Console.WriteLine(ex.ToString());
}
Console.ReadLine();
}
}
}
मैं इस कोड को लाइन 14 पर शुरू होने वाले कॉलस्टैक को प्रिंट करने की अपेक्षा करता हूं; हालांकि कॉलस्टैक 18 वें स्थान पर शुरू होता है। बेशक यह नमूना में कोई बड़ा सौदा नहीं है, लेकिन मेरे वास्तविक जीवन आवेदन में, प्रारंभिक त्रुटि जानकारी खोना काफी दर्दनाक है।
क्या मुझे कुछ याद आ रही है? वहाँ (यानी ढेर जानकारी खोने के बिना एक अपवाद फेंक फिर से?)
मैं .net का उपयोग कर रहा एक और तरीका प्राप्त करने के लिए जो मैं चाहता 3.5
धन्यवाद, आपके द्वारा प्रदान किया गया लिंक वास्तव में उपयोगी था, और सीधे InternalPreserveStackTrace को कॉल करने से मुझे मेरी समस्या हल करने की अनुमति मिली! – Brann
यदि उपर्युक्त लिंक कभी मर जाता है, या कोई इसका पालन नहीं करना चाहता है, तो आपको अपने अपवाद पर स्टैक को संरक्षित करने के लिए केवल इतना करना है: 'टाइपऑफ (अपवाद) .GetMethod ("InternalPreserveStackTrace", बाइंडिंगफ्लैग। इंस्टेंस | बाइंडिंगफ्लैग नॉनपब्लिक) .वॉवोक (पूर्व, शून्य); ' –