पकड़ने मैं एक StackOverflowException
कैसे पकड़ करते हैं?एक StackOverflowException
मेरे पास एक ऐसा प्रोग्राम है जो उपयोगकर्ता को स्क्रिप्ट लिखने की अनुमति देता है, और जब मनमाने ढंग से उपयोगकर्ता-कोड चलाता है तो मुझे StackOverflowException
मिल सकता है। दिखा रहे उपयोगकर्ता कोड स्पष्ट रूप से के साथ एक try
घिरा हुआ है - catch
, लेकिन ढेर अतिप्रवाह सामान्य परिस्थितियों में uncatchable हैं।
मैं देख ली है और this सबसे जानकारीपूर्ण जवाब मैं मिल सकता है, लेकिन अब भी मुझे एक मरे हुए अंत करने के लिए नेतृत्व किया; एक article in the BCL team's blog से मैंने पाया कि मैं RuntimeHelpers.ExecuteCodeWithGuaranteedCleanup
का उपयोग करना चाहिए कोड और प्रतिनिधि है कि एक ढेर अतिप्रवाह के बाद भी बुलाया जायेगा कॉल करने के लिए, लेकिन जब कोशिश कर रहा है, इस प्रक्रिया प्रतिनिधि कभी कहा जाता है बिना ढेर अतिप्रवाह संदेश के साथ समाप्त हो जाता है। मैंने हैंडलर विधि पर PrePrepareMethodAttribute
जोड़ने का प्रयास किया है लेकिन इससे कुछ भी नहीं बदला है।
मैंने ऐपडोमेन का उपयोग करने और UnhandledException
और DomainUnload
ईवेंट दोनों को संभालने का भी प्रयास किया है - लेकिन पूरी प्रक्रिया स्टैक ओवरफ़्लो पर मारे जाती है। एक ही है, भले ही मैं throw new StackOverflowException();
मैन्युअल रूप से और न कि वास्तविक ढेर अतिप्रवाह प्राप्त होता है।
क्या आपके पास ऐसा प्रोग्राम है जो कुछ मनमानी प्रक्रिया को स्वचालित करने के लिए स्क्रिप्ट का उपयोग कर सकता है, या क्या आपका प्रोग्राम स्क्रिप्ट के लिए एक टेक्स्ट एडिटर है? क्या आपका "मनमाना उपयोगकर्ता-कोड" स्वयं एक स्क्रिप्ट या किसी प्रकार का आईएल प्लग-इन है? –
अभी मेरा प्रोग्राम भाषा के लिए एक आरईपीएल (रीड-इवल-प्रिंट लूप) है। – configurator