2008-09-30 10 views
6

हमें उस एप्लिकेशन के साथ समस्या है जिसे हम विकसित कर रहे हैं। बहुत ही कम, एक सौ में एक बार की तरह, आवेदन शुरू होने पर दुर्घटनाग्रस्त हो जाता है। जब दुर्घटना होती है तो यह पूरी प्रणाली को लाता है, कंप्यूटर बीप शुरू होता है और पूरी तरह से जम जाता है, पुनर्प्राप्ति का एकमात्र तरीका बिजली को बंद करना है (हम विंडोज एक्सपी का उपयोग कर रहे हैं)। दुर्घटना की दुर्लभता इस तथ्य के साथ मिलती है कि हम डीबगर में नहीं तोड़ सकते हैं या जब भी ऐसा होता है तो स्टैकडम्प उत्पन्न होता है, जिससे इसे डीबग करना मुश्किल हो जाता है।किसी एप्लिकेशन से सभी फ़ंक्शन कॉल लॉगिंग/निगरानी

मैं ऐसी किसी चीज़ की तलाश में हूं जो किसी फ़ाइल को सभी फ़ंक्शन कॉल लॉग करता है। क्या ऐसा उपकरण मौजूद है? इसे कार्यान्वित करना असंभव नहीं होना चाहिए, वीटीयूएन जैसे प्रोफाइलर्स कुछ समान हैं।

हम विजुअल स्टूडियो 2008 (सी ++) का उपयोग कर रहे हैं।

धन्यवाद

एबी।

उत्तर

0

जीसीसी (संस्करण MingGW for Windows development सहित) एक कोड पीढ़ी स्विच -finstrument-functions कहा जाता है कि संकलक बताता कार्यों __cyg_profile_func_enter और हर समारोह कॉल के आसपास __cyg_profile_func_exit कहा जाता है के लिए विशेष कॉल फेंकना है। विजुअल सी ++ के लिए, /GH और /Gh नामक समान विकल्प हैं। ये संकलक को __penter को कॉल उत्सर्जित करने और फ़ंक्शन कॉल के आसपास __pexit का कारण बनता है।

इन उपकरण मोड को लॉगिंग सिस्टम को लागू करने के लिए उपयोग किया जा सकता है, जिसमें आप संकलक को अपने स्थानीय फाइल सिस्टम या आपके नेटवर्क पर किसी अन्य कंप्यूटर पर आउटपुट उत्पन्न करते हैं।

यदि संभव हो, तो मैं valgrind या इसी तरह की जांच उपकरण का उपयोग करके अपने सिस्टम को चलाने का प्रयास भी करूंगा। इससे पहले कि यह बाहर हो जाता है इससे आपकी समस्या हो सकती है।

2

लॉगिंग विचार के साथ ही समस्या यह है कि जब सिस्टम क्रैश, नवीनतम लॉग प्रविष्टियों अभी भी कैश में हो सकता है और कोई मौका नहीं डिस्क पर लिखी किया जाना है ... हो सकता है

अगर यह मैं था मैं करूंगा है एक अलग पीसी पर प्रोग्राम चलाने का प्रयास करें - यह समस्या उत्पन्न करने वाले फ्लैकी हार्डवेयर या ड्राइवर हो सकता है। एक आवेदन कार्यक्रम "सिस्टम" को कम करने में सक्षम नहीं होना चाहिए।

2

कुछ विचार-
एक अच्छा मौका है कि आपके दुर्घटना से ठीक पहले आवेदन में कुछ अपवाद है। यदि आप SetUnhandledExceptionFilter() का उपयोग करके सभी अनचाहे अपवादों के लिए हैंडलर सेट करते हैं और अपनी लॉग फ़ाइल में एक स्टैक ट्रेस लिखते हैं, तो आपको कार्रवाई में क्रैश को पकड़ने का मौका मिल सकता है।
बस प्रत्येक लेखन के बाद फ़ाइल को फ्लश करना याद रखें।

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

+0

स्ट्रैंट लिंक के लिए धन्यवाद। – Constantin

3

लॉगिंग फ़ंक्शन प्रविष्टियां/निकास आपकी समस्या का निम्न-स्तर दृष्टिकोण है। मैं स्वचालित डीबगर उपकरण का उपयोग करने का सुझाव दूंगा (regedit के साथ छवि फ़ाइल निष्पादन विकल्पों के तहत डीबगर कुंजी का उपयोग करके या पैकेज से gflags का उपयोग करके मैं नीचे एक लिंक प्रदान करता हूं) और समस्या को तब तक पुनर्स्थापित करने का प्रयास करता हूं जब तक यह क्रैश न हो जाए।इसके अतिरिक्त, आप स्क्रिप्ट का उपयोग कर संदिग्ध मॉड्यूल (ओं) का डीबगर लॉग फ़ंक्शन कॉल इतिहास प्राप्त कर सकते हैं या कोई अन्य जानकारी एकत्र कर सकते हैं।
लेकिन आपके आवेदन के ब्योरे को नहीं जानना समाधान का सुझाव देना बहुत मुश्किल है। क्या यह एक उपयोगकर्ता ऐप, सेवा या ड्राइवर है? विंडोज स्टार्टअप या ऐप के स्टार्टअप पर "स्टार्टअप पर क्रैश" का क्या अर्थ है?
समस्या निवारण के लिए इस debugger package का उपयोग करें।

2

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

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