मैंने अपने क्यूटी अनुप्रयोग के विंडोज़ बिल्ड में मिनी-कोर-डंप फीचर (__try/__ को छोड़कर और मिनीडंपवाइट डंप() के माध्यम से) जोड़ा है, ताकि अगर मेरा एप्लिकेशन कभी भी क्रैश हो जाए, तो एक .dmp फ़ाइल लिखी जाएगी मेरे लिए बाद में देखने और डीबग करने के लिए डिस्क पर।जानबूझकर मेरे विंडोज़ एप्लिकेशन को क्रैश करने का सबसे अच्छा तरीका क्या है?
यह बहुत अच्छी तरह से काम करता है, लेकिन परीक्षण के लिए मैं अपने प्रोग्राम को क्रैश करने के लिए एक ज्ञात-विश्वसनीय विधि चाहता हूं। उदाहरण के लिए, जीयूआई में "क्रैश अब" बटन हो सकता है और जब उपयोगकर्ता इसे क्लिक करता है, तो यह एप्लिकेशन को जानबूझकर दुर्घटनाग्रस्त कर देगा।
एक तरह से करने के लिए यह, ज़ाहिर है, इस तरह है:
int * badPointer = NULL;
*badPointer = 666;
और वह मेरे लिए काम करता है, लेकिन मुझे लगता है कि दृष्टिकोण पसंद नहीं है क्योंकि यह अपरिभाषित व्यवहार पर निर्भर करता है - विशेष रूप से, C++ मानक को क्रैश होने के लिए उपरोक्त कोड की आवश्यकता नहीं है, इसलिए यह संभव है (भाषा-वकील परिप्रेक्ष्य से) कि उपरोक्त कोड निष्पादित होने पर संकलक का कुछ भविष्य संस्करण क्रैश नहीं होगा।
एक अधिक "आधिकारिक" दृष्टिकोण के रूप में, मैं इस कोशिश की:
abort();
... जो कार्यक्रम को समाप्त करता है, लेकिन यह विंडोज संरचित अपवाद कि MiniCrashDump हैंडलर से चलाता है का कारण नहीं है, इसलिए कोई .dmp फ़ाइल लिखी जाती है।
मेरा सवाल है, क्या मेरे कार्यक्रम को दुर्घटनाग्रस्त करने के लिए "आधिकारिक अधिकार" है? मैं देखता हूं कि विंडोज एपीआई में एक RaiseException() फ़ंक्शन है जिसे मैं कॉल कर सकता हूं, लेकिन मुझे यकीन नहीं है कि इसके लिए उचित तर्क क्या होना चाहिए। क्या यह जाने का तरीका है, या क्या कुछ और विशिष्ट कॉल है कि मैं उपयोग करने से बेहतर होगा?
स्क्रीन के माध्यम से हथौड़ा। –
आप भारी कार्यान्वयन विशिष्ट कीवर्ड और व्यवहार का उपयोग कर रहे हैं और आप चिंतित हैं कि सी ++ स्पेक इसके बारे में कुछ दिन कह सकता है ?? निश्चित रूप से, RaiseException() आधिकारिक तरीका है। –
@ हंसपैसेंट यह सी ++ स्पेक नहीं है जो मुझे एमएसवीसी ऑप्टिमाइज़र के रूप में बहुत चिंतित करता है, जो कि जीसीसी-स्टाइल दिमागी चाल चलाना शुरू कर सकता है जैसे कि "चूंकि मुझे पता है कि बैड पॉइंटर न्यूल है, और चूंकि एक पूर्ण सूचक का अपरिवर्तनीय व्यवहार अनिश्चित है, मैं कर सकता हूं ऑप्टिमाइज़ करें जो लिखते हैं "... और फिर अचानक मेरा क्रैश बटन अब क्रैश नहीं होता है। :) –