2009-06-12 19 views
7

क्रैश हो जाएगा, मैं थोड़ी देर के लिए Google क्रोम का उपयोग कर रहा हूं और मैंने देखा कि इसमें बहुत ही शानदार क्रैश नियंत्रण है।भविष्यवाणी करते हुए कि प्रोग्राम

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

मेरा प्रश्न यह है कि आप अपने संकलित एप्लिकेशन को अग्रिम में क्रैश स्थिति का पता लगाने के लिए कैसे प्रोग्राम कर सकते हैं? यदि आपको किसी प्रोग्रामिंग भाषा/मंच में इसे कैसे करना है, तो यह बहुत अच्छा होगा।

धन्यवाद

+6

इस प्रश्न पर पहली नज़र में, मुझे आश्चर्य हुआ कि क्या यह इस बारे में होगा कि क्या Google ने हलिंग समस्या का समाधान किया है ... –

उत्तर

16

गूगल क्रोम एक तकनीक (अक्सर प्रक्रिया जुदाई कहा जाता है) जहां 'होस्ट' यूआई बच्चे का प्रबंधन करता है का उपयोग करता है प्रक्रियाओं है कि यह अनुत्तरदायी बनने का पता लगा सकते (या बुरा, एक त्रुटि और समापन फेंक)। यह आपके द्वारा खोले जाने वाले प्रत्येक टैब के लिए एक नई प्रक्रिया शुरू करता है।

Here's an article इसे थोड़ा और विस्तार से वर्णन करते हुए।

.net की Process कक्षा का उपयोग करके, आप प्रक्रिया शुरू कर सकते हैं, जांच सकते हैं कि वे उत्तरदायी हैं और यहां तक ​​कि उन्हें मार भी सकते हैं।

यदि आप अपनी प्रक्रिया में 'विंडो को एम्बेड करना चाहते हैं, तो आप एक विंडो को दूसरे स्थानांतरित करने के लिए SetParent जैसे प्लेटफॉर्म फ़ंक्शंस का उपयोग कर सकते हैं। मुझे डर है कि फॉर्म के साथ काम करते समय मुझे सेटपैंट के प्रबंधित विकल्प से अवगत नहीं है, लेकिन मुझे संदेह है कि कोई मौजूद है इसलिए सेटपैंटेंट का उपयोग करने से पहले इसके लिए खोज करना उचित है।

यदि होस्ट प्रक्रिया क्रैश हो जाती है, तो बस AppDomain.CurrentDomain.UnhandledException जैसे कुछ का उपयोग करने से आपको एक अधिसूचना प्राप्त करने की अनुमति मिल जाएगी कि एक शीर्ष-स्तरीय अपवाद हुआ है, लेकिन इस चरण तक आप अपने भीतर वस्तुओं की स्थिति की भविष्यवाणी करने में सक्षम होने की संभावना नहीं रखते हैं ऐप और पुनरारंभ करना (कुछ लॉगिंग और उपयोगकर्ता को अधिसूचना के साथ) शायद आपका एकमात्र समझदार विकल्प है।

शीर्ष-स्तरीय अपवादों को संभालना covered in detail here है।

4

.NET में, आप System.AppDomain.CurrentDomain.UnhandledException ईवेंट तक पहुंच सकते हैं। आपका कोड इस तरह कुछ दिखाई देगा:

using System; 
using System.Windows.Forms; 

public class Program 
{ 
    public static void Main(string[] args) 
    { 
     AppDomain.CurrentDomain.UnhandledException += MyUnhandledExceptionHandler; 

     // start rest of application 
    } 

    private static void MyUnhandledExceptionHandler(object sender, EventArgs args) 
    { 
     MessageBox.Show("Your app is crashing. Watch out!"); 
    } 
} 
+0

नाइस - जब कोई कोई प्रश्न का उत्तर देता है तो मुझे हमेशा कुछ कोड नमूने देखना पसंद है। –

+0

आपको उससे अधिक करने की ज़रूरत है, देखें http://www.danielmoth.com/Blog/2004/08/global-exception-handling-net-v11-part.html – mhenry1384

12

मुझे Google का कोड नहीं पता है इसलिए मैं अनुमान लगा रहा हूं। Google क्रोम शायद यह अनुमान नहीं लगा रहा है कि यह दुर्घटनाग्रस्त हो जाएगा, लेकिन यह पता लगा रहा है कि यह दुर्घटनाग्रस्त हो गया है।

विंडोज़ में आप सभी अनचाहे अपवादों के लिए हैंडलर प्रदान करके ऐसा कर सकते हैं। इस हैंडलर में आप एप्लिकेशन को पुनरारंभ करने, मिनीडिंप फ़ाइल बनाने आदि जैसी चीजें कर सकते हैं।

एक विधि के लिए SetUnhandledExceptionFilter Function पर एक नज़र डालें।

+3

ध्यान दें कि विंडोज डीबग विंडो आने का कारण बाद में यह है कि Google आगे बढ़ता है और इसके साथ किए जाने के बाद त्रुटि को ओएस में फेंकता है। – NotMe

+0

का क्रमबद्ध करें। यह पता लगा रहा है कि इसके एक बच्चे की प्रक्रिया दुर्घटनाग्रस्त हो गई है। –

3

एक पुनरारंभ API है। Daniel Moth has blogged about it here और here। कृपया ध्यान दें कि मैं यह नहीं कह रहा हूं कि Google क्रोम काम करता है, बस यह ऐसा कुछ है जिसे आप देखना चाहते हैं।

मेरा मानना ​​है कि आप अलग-अलग App Domains में ऐप के बिट्स भी लोड कर सकते हैं। मेरा मानना ​​है कि यह .NET 3.5 Addin framework uses है, हालांकि मैं नहीं कह सकता कि मैंने कभी इसका उपयोग किया है (केवल इसके बारे में पढ़ें)। ऐसा लगता है जैसे डैनियल blogged about this too है।

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