.NET 1.1 में अनचाहे अपवाद हैंडलर

मैं एक .NET 1.1 एप्लिकेशन को बनाए रख रहा हूं और जिन चीज़ों के साथ मुझे कार्य किया गया है उनमें से एक यह सुनिश्चित कर रहा है कि उपयोगकर्ता को कोई भी त्रुटिपूर्ण त्रुटि अधिसूचनाएं दिखाई न दें।

मैंने हैंडलर को एप्लिकेशन। थ्रेड अपवाद और AppDomain.CurrentDomain.UnhandledException में जोड़ा है, जिसे कॉल किया जाता है। मेरी समस्या यह है कि मानक सीएलआर त्रुटि संवाद अभी भी प्रदर्शित होता है (अपवाद हैंडलर कहा जाता है)।

जेफ इस ब्लॉग के बारे में अपने ब्लॉग यहां और यहां । लेकिन कोई समाधान नहीं है। तो बेजोड़ अपवादों को संभालने और एक दोस्ताना संवाद बॉक्स प्रदर्शित करने के लिए .NET 1.1 में मानक तरीका क्या है?

जेफ की प्रतिक्रिया को सही उत्तर के रूप में चिह्नित किया गया था, क्योंकि उनके द्वारा प्रदान किए गए लिंक में सबसे आवश्यक जानकारी है कि क्या आवश्यक है।

0
जोड़ा संपादित
विचारों: 1
अगर आपको लगता है कि इस पोस्ट का उत्तर दिया गया है, तो कृपया उत्तर के रूप में चिह्नित करें।
जोड़ा लेखक Anonymous User, स्रोत

8 उत्तर

यूएपीएस लॉग के अलावा जैप का उल्लेख है, आपको "एप्लिकेशन" इवेंट लॉग में प्रासंगिक जानकारी भी मिल जाएगी।

आप इवेंट व्यूअर को व्यवस्थापकीय उपकरण में पा सकते हैं या बस runvwr.exe को रन में लिख सकते हैं।

कोडप्लेक्स पर परियोजनाओं के बहुत सारे हैं जो यूएलएस लॉग फ़ाइल के प्रबंधन के लिए सहायक हैं। बस Codeplex.com पर यूएलएस के लिए खोजें

आखिर में मैं Hristo Pavlov द्वारा SPTraceView का उपयोग करने की अनुशंसा कर सकता हूं जो आपको वास्तविक समय में होने वाली यूएलएस घटनाएं देता है। उत्पादन डीबगिंग करते समय विशेष रूप से शक्तिशाली। इसे DebugView के साथ भी जोड़ा जा सकता है।

EDIT: A good blog post on all the logs of SharePoint: How do i troubleshoot SharePoint? So many logs!

8
जोड़ा
एकीकृत लॉगिंग सेवा
जोड़ा लेखक Anonymous User, स्रोत
यूएलएस लॉग उन ट्रेस लॉग हैं जो SharePoint डेटा को अपने एपीआई को निष्पादित करते समय लिखते हैं। आप सीए> ऑपरेशंस> डायग्नोस्टिक लॉगिंग में विभिन्न श्रेणियों के लिए व्यक्तिगत रूप से यूएलएस और इवेंट लॉग के लिए ट्रेस स्तर सेट कर सकते हैं। ध्यान रखें कि यदि आप लॉग स्तर बहुत अधिक सेट करते हैं तो यह प्रदर्शन और संग्रहण दोनों को प्रभावित कर सकता है। किसी समस्या को डीबग करने के मामले में आप उन्हें वर्बोज़ पर सेट कर सकते हैं और बाद में उन्हें मध्यम पर सेट कर सकते हैं। और पढ़ें: technet.microsoft.com/en-us/library/
जोड़ा लेखक Anonymous User, स्रोत
यूएलएस के लिए छोटा है?
जोड़ा लेखक engtech, स्रोत
एकीकृत लॉगिंग सेवा क्या है? SharePoint सर्वर के लिए कुछ विशिष्ट है? क्या आपके पास पढ़ने के लिए कोई और दस्तावेज है?
जोड़ा लेखक engtech, स्रोत

निम्नलिखित फ़ोल्डर में सर्वर द्वारा यूएलएस लॉग उत्पन्न होते हैं:

सी: \ प्रोग्राम फ़ाइलें \ सामान्य फ़ाइलें \ Microsoft साझा \ वेब सर्वर एक्सटेंशन \ 12 \ LOGS

आप केंद्रीय व्यवस्थापक के माध्यम से लॉगिंग के स्तर को संशोधित कर सकते हैं उदा। अधिक verbose या कम verbose।

एक "12 हाइव" टूलबार स्टार्ट बार में ताकि आप आसानी से लॉग और सभी शेष शेयरपॉइंट तक पहुंच सकें जो 12 हाइव में रहता है।

वहां ओपन सोर्स टूल्स भी हैं जो आपको उपयोगकर्ता के अनुकूल इंटरफ़ेस के माध्यम से लॉग देखने की अनुमति देते हैं। एक उदाहरण है WSS/MOSS लॉग फ़ाइल रीडर , स्टुअर्ट स्टारर्स

4
जोड़ा
उन लॉग फ़ाइलों को सी से दूर करने के लिए भी एक अच्छा विचार है: और अपने डेटा ड्राइव में :-) आप केंद्रीय प्रशासन में दोनों डायग्नोस्टिक्स और ट्रेस लॉग फ़ाइल पथ निर्धारित कर सकते हैं
जोड़ा लेखक Anonymous User, स्रोत
ऐसा इसलिए है क्योंकि ट्रेस लॉग लगातार शेयरपॉइंट द्वारा लिखा जा रहा है
जोड़ा लेखक Anonymous User, स्रोत
जब मैं सबसे आखिरी फ़ाइल लॉग देखता हूं, तो मुझे त्रुटि से मुलाकात की - फ़ाइल अन्य प्रक्रिया द्वारा उपयोगकर्ता हो रही है। क्या गलत है इसका कोई आइडिया?
जोड़ा लेखक engtech, स्रोत
एमएस ने यहां अपने यूएलएस व्यूअर टूल को भी code.msdn.microsoft.com/ULSViewer जारी किया
जोड़ा लेखक Alex Angas, स्रोत
@ एलेक्सएंगस यूएलएस व्यूअर के लिए यह लिंक अब अच्छा नहीं है। (5 साल बाद, वह है ...)
जोड़ा लेखक bgmCoder, स्रोत
@ बीजीएम अब यहां पुनः जारी किया गया है: microsoft.com/en- हमें/डाउनलोड/details.aspx? id = 44020 । अजीब समय ...
जोड़ा लेखक Alex Angas, स्रोत
लिंक अपडेट के लिए @AlexAngas धन्यवाद!
जोड़ा लेखक bgmCoder, स्रोत

"डेटा स्रोत से डेटा प्राप्त करने का प्रयास करते समय सर्वर ने एक गैर-विशिष्ट त्रुटि लौटा दी। अपनी क्वेरी का प्रारूप और सामग्री जांचें और पुनः प्रयास करें। अगर समस्या बनी रहती है, तो सर्वर व्यवस्थापक से संपर्क करें।" त्रुटि एक SharePoint Designer त्रुटि है और आप इसके बारे में लॉग में कुछ भी देखने की संभावना नहीं है।

If you are only doing Data View -> Insert Dataview and getting this error, I'd be surprised. Are you doing anything else before you get the error? It could be that you are trying to insert the Dataview in a part of the page where it cannot be, such as inside another control.

1
जोड़ा
यदि आप त्रुटि का क्या जवाब दे सकते हैं तो आपको शायद एक नया विषय बनाना चाहिए। प्रश्न सामान्य रूप से लॉगिंग के बारे में था।
जोड़ा लेखक Anonymous User, स्रोत
हाय मार्क, मैं डेटाव्यू को वेबपार्ट लेआउट पेज में खींच रहा हूं (मैं लेआउट के आधार पर एक नया खाली वेबपर्ट पेज बना रहा हूं)। क्या मैं डेटाव्यू को वेबपार्ट में खींच सकता हूं?
जोड़ा लेखक engtech, स्रोत
मुझे इस तरह के मामलों में यह मिल गया है - आम तौर पर एक सूची में एक लुकअप फ़ील्ड जोड़ना शामिल है जिसमें पहले से ही बहुत सारी चीज़ें और वर्कफ़्लोज़ और अन्य मज़े हैं - एसपी पसंद नहीं करता है कि कुछ अजीब संयोजन है। परीक्षण वस्तुओं को हटाने से दुनिया में सब ठीक हो जाता है।
जोड़ा लेखक ebruchez, स्रोत

क्या यह एक कंसोल एप्लिकेशन या विंडोज फॉर्म एप्लीकेशन है? यदि यह एक .NET 1.1 कंसोल एप्लिकेशन है, तो दुख की बात है, यह डिजाइन द्वारा - यह एक एमएसएफटी देव द्वारा आपके द्वारा संदर्भित दूसरा ब्लॉग पोस्ट :

<�पी> बीटीडब्लू, मेरी 1.1 मशीन पर एमएसडीएन के उदाहरण में अपेक्षित आउटपुट है; यह सिर्फ इतना है कि जब तक आप डीबगर (या नहीं) संलग्न करते हैं, तब तक दूसरी पंक्ति दिखाई नहीं देती है। V2 में हमने चीजों को चारों ओर फिसल दिया है ताकि अनचाहे एक्सेप्शन इवेंट डीबगर अटैचमेंट से पहले आग लग जाए, जो कि ज्यादातर लोग अपेक्षा करते हैं।

ऐसा लगता है जैसे .NET 2.0 यह बेहतर करता है (भलाई का शुक्र है), लेकिन ईमानदारी से, मेरे पास वापस जाने और जांचने का समय कभी नहीं था।

0
जोड़ा

ओह, विंडोज़ फॉर्म में आप निश्चित रूप से इसे काम करने में सक्षम होना चाहिए। एकमात्र चीज़ जो आपको देखना है वह अलग-अलग धागे पर हो रही है।

मेरे यहां एक पुराना कोड प्रोजेक्ट आलेख है जिसकी सहायता करनी चाहिए:

उपयोगकर्ता मित्रतापूर्ण अपवाद हैंडलिंग

0
जोड़ा

यह एक विंडोज़ फॉर्म एप्लीकेशन है। एप्लिकेशन द्वारा पकड़े गए अपवाद। थ्रेडएक्सप्शन ठीक काम करते हैं, और मुझे बदसूरत .NET अपवाद बॉक्स ( ठीक समाप्त करने के लिए, रद्द करें डीबग करने के लिए नहीं मिलता है? कौन आया उस के साथ??)।

मुझे कुछ अपवाद मिल रहे थे जिन्हें उस पर पकड़ा नहीं जा रहा था और AppDomain पर जा रहा था। अनचाहे अपवाद घटना जो समस्याएं पैदा कर रही थी। मुझे लगता है कि मैंने उन अधिकांश अपवादों को पकड़ा है, और मैं उन्हें अब हमारे अच्छे त्रुटि बॉक्स में प्रदर्शित कर रहा हूं।

इसलिए मुझे उम्मीद करनी होगी कि कुछ अन्य परिस्थितियां नहीं हैं जो अपवादों को एप्लिकेशन द्वारा पकड़े नहीं जाएंगी। थ्रेडएक्सप्शन हैंडलर।

0
जोड़ा

AppDomain.UnhandledException is an event, not a global exception handler. This means, by the time it is raised, your application is already on its way down the drain, and there is nothing you can do about it, except for doing cleanup and error logging.

दृश्यों के पीछे क्या हुआ यह है: ढांचे ने अपवाद का पता लगाया, कॉल टॉप स्टैक को बहुत ऊपर तक चला गया, कोई भी हैंडलर नहीं मिला जो त्रुटि से ठीक हो जाएगा, इसलिए यह निर्धारित करने में असमर्थ था कि निष्पादन जारी रखना सुरक्षित था या नहीं। इसलिए, इसने शटडाउन अनुक्रम शुरू किया, और इस घटना को आपके लिए सौजन्य के रूप में निकाल दिया ताकि आप अपने पहले से ही नष्ट होने वाली प्रक्रिया में अपने सम्मान का भुगतान कर सकें। यह तब होता है जब मुख्य धागे में अपवाद को छोड़ दिया जाता है।

इस तरह की त्रुटि के लिए कोई एकल बिंदु समाधान नहीं है। आपको एक वास्तविक अपवाद हैंडलर (एक कैच ब्लॉक) सभी जगहों के अपस्ट्रीम डालने की आवश्यकता है जहां यह त्रुटि होती है और इसे (उदाहरण के लिए) एक वैश्विक हैंडलर विधि / कक्षा में अग्रेषित करने की आवश्यकता होती है जो यह निर्धारित करेगी कि यह केवल रिपोर्ट करने और जारी रखने के लिए सुरक्षित है या नहीं, अपवाद प्रकार और / या सामग्री।

संपादित करें: विंडोज़ में निर्मित त्रुटि-रिपोर्टिंग तंत्र को अक्षम करना संभव है (= हैक) ताकि आपका ऐप डाउन होने पर अनिवार्य "क्रैश एंड बर्न" संवाद प्रदर्शित न हो। हालांकि, यह सिस्टम में अनुप्रयोगों के लिए सभी के लिए प्रभावी हो जाता है, न कि केवल स्वयं।

0
जोड़ा

.NET 1.x विंडोज फॉर्म एप्लिकेशन में अनचाहे अपवाद व्यवहार इस पर निर्भर करता है:

  • थ्रेड का प्रकार जिसने अपवाद फेंक दिया
  • क्या यह विंडो संदेश प्रसंस्करण के दौरान हुआ था
  • क्या प्रक्रिया से डीबगर संलग्न किया गया था
  • DbgJitDebugLaunchSetting रजिस्ट्री सेटिंग
  • App.Config
  • में jitDebugging ध्वज
  • चाहे आप विंडोज फॉर्म अपवाद हैंडलर को ओवरराइड करें
  • क्या आपने सीएलआर की अपवाद घटना को संभाला है
  • चंद्रमा का चरण

अनचाहे अपवादों का डिफ़ॉल्ट व्यवहार है:

  • यदि विंडो संदेशों को पंप करते समय मुख्य थ्रेड पर अपवाद होता है, तो इसे Windows फॉर्म अपवाद हैंडलर द्वारा अवरुद्ध किया जाता है।
  • यदि विंडो संदेशों को पंप करते समय मुख्य थ्रेड पर अपवाद होता है, तो यह ऐप प्रक्रिया को तब तक समाप्त कर देगा जब तक कि इसे विंडोज फॉर्म अपवाद हैंडलर द्वारा अवरुद्ध नहीं किया जाता है।
  • यदि मैन्युअल, थ्रेडपूल या फ़ाइनेंजर थ्रेड पर अपवाद होता है, तो यह सीएलआर द्वारा निगल लिया जाता है।

एक अनचाहे अपवाद के लिए संपर्क के बिंदु हैं:

  • विंडोज फॉर्म अपवाद हैंडलर।
  • जेआईटी-डीबग रजिस्ट्री स्विच DbgJitDebugLaunchSetting।
  • सीएलआर अनचाहे अपवाद घटना।

Windows फॉर्म अंतर्निहित अपवाद हैंडलिंग डिफ़ॉल्ट रूप से निम्नलिखित करता है:

  • Catches an unhandled exception when:
    • exception is on main thread and no debugger attached.
    • exception occurs during window message processing.
    • jitDebugging = false in App.Config.
  • Shows dialog to user and prevents app termination.

आप App.Config में jitDebugging = true सेट करके बाद के व्यवहार को अक्षम कर सकते हैं। लेकिन याद रखें कि यह ऐप समाप्ति रोकने का आपका आखिरी मौका हो सकता है। तो एक अनचाहे अपवाद को पकड़ने का अगला चरण इवेंट एप्लिकेशन के लिए पंजीकरण कर रहा है। थ्रेड अपवाद, उदा।

Application.ThreadException += new
Threading.ThreadExceptionHandler(CatchFormsExceptions);

HKEY_LOCAL_MACHINE \ Software.NetFramework के अंतर्गत रजिस्ट्री सेटिंग DbgJitDebugLaunchSetting को नोट करें। इसमें तीन मानों में से एक है जिसमें से मुझे पता है:

  • 0: "डीबग या टर्मिनेट" पूछने वाले उपयोगकर्ता संवाद दिखाता है।
  • 1: सीएलआर के साथ निपटने के लिए अपवाद देता है।
  • 2: DbgManagedDebugger रजिस्ट्री कुंजी में निर्दिष्ट डीबगर लॉन्च करता है।

विजुअल स्टूडियो में, मेनू टूल्स पर जाएं? विकल्प ? डीबगिंग ? इस कुंजी को 0 या 2 पर सेट करने के लिए JIT लेकिन 1 का मान अंततः उपयोगकर्ता की मशीन पर सबसे अच्छा होता है। ध्यान दें कि सीएलआर अनचाहे अपवाद घटना से पहले इस रजिस्ट्री कुंजी पर कार्य किया जाता है।

यह आखिरी घटना एक अनचाहे अपवाद लॉग करने का आपका आखिरी मौका है। आपके आखिरकार ब्लॉक निष्पादित होने से पहले यह ट्रिगर हो गया है। आप इस घटना को निम्नानुसार रोक सकते हैं:

AppDomain.CurrentDomain.UnhandledException += new
System.UnhandledExceptionEventHandler(CatchClrExceptions);
0
जोड़ा