2009-04-09 17 views
13

मैं सी/सी ++ कोड का परीक्षण करने के लिए एक सतत एकीकरण सर्वर के रूप में हडसन का उपयोग कर रहा हूं। दुर्भाग्यवश, मेरे पास कहीं भी एक बग है जो स्मृति भ्रष्टाचार का कारण बनता है, इसलिए कुछ विंडोज मशीनों पर मुझे कभी-कभी "एप्लिकेशन त्रुटि" संवाद बॉक्स मिल जाएगा, जिसमें यह समझाया जा सकता है कि एक निर्देश को स्मृति को संदर्भित किया गया है जिसे पढ़ा नहीं जा सका। यह संवाद बॉक्स पॉप अप करता है और मूल रूप से टेस्ट रन लटकता है, क्योंकि इसे मैन्युअल हस्तक्षेप की आवश्यकता होती है।क्या "एप्लिकेशन त्रुटि" संवाद बॉक्स अक्षम किया जा सकता है?

क्या इस संवाद बॉक्स को प्रदर्शित होने से रोकने का कोई तरीका है, ताकि परीक्षण रन आसानी से विफल हो और हडसन में इसकी सूचना दी जा सके?

क्या संवाद दिखाने के बजाए स्वचालित रूप से मिनीडम्प उत्पन्न करना संभव है?

+0

इसी प्रकार: https://stackoverflow.com/questions/2284138/disable-debug-prompt-on-plplication-crash और https://stackoverflow.com/questions/3561545/how-to-terminate-a-program -वेन-द-क्रैश-जो-चाहिए-बस-असफल-ए-यूनिट-टेस्ट – Vadzim

उत्तर

11
  1. उपयोग का जवाब नियंत्रित करने के लिए के रूप में श्री धीरे चलता है विभिन्न _CrtSetReport कार्यों का उपयोग कर सकते हैं। this PC World article भी देखें।
  2. यदि आपके पास अपनी बिल्ड मशीन पर एमएस विजुअल स्टूडियो है, तो यह एप्लिकेशन त्रुटियों को पकड़ लेगा और एक संवाद बॉक्स पॉप अप करेगा। इन संवादों को अक्षम करने के लिए (और विजुअल स्टूडियो की जस्ट-इन-टाइम डिबगिंग सुविधा भी), डॉ वॉटसन को डिफ़ॉल्ट सिस्टम डीबगर के रूप में सेट करने के लिए drwtsn32.exe -i आदेश चलाएं। डॉ वाटसन कोर डंप उत्पन्न करेंगे और चुपचाप बाहर निकलेंगे। (इस Microsoft नॉलेज बेस आलेख देखें:। http://support.microsoft.com/kb/q121434/)
+1

धन्यवाद! डॉ वाटसन कॉन्फ़िगरेशन को पुनर्स्थापित करना और इसे संकेत देने के लिए सेट करना सिर्फ वही था जो मैं ढूंढ रहा था! – mch

+1

पीसी वर्ल्ड आलेख खाली प्रतीत होता है। नतीजतन पहला विकल्प कोई उपयोगी उत्तर प्रदान नहीं करता है। – skyking

-2

अपवाद को पकड़ने के लिए प्रयास/पकड़ विवरण का उपयोग करें और जिस तरह से आप चाहते हैं उसे संभालें।

+1

जहां तक ​​मुझे पता है, कोशिश करें/कैच अमान्य मेमोरी एक्सेस नहीं पकड़ सकता है। – mch

+1

__try/__except हालांकि, कर सकते हैं। – ChrisV

1

अक्षम त्रुटि रिपोर्टिंग के माध्यम से:

  • रजिस्ट्री संपादन -
  • मेरा कंप्यूटर पर राइट क्लिक करें, उन्नत करने के लिए जाना HKEY_LOCAL_MACHINE \ SOFTWARE \ Microsoft \ PCHealth \ ErrorReporting \ ExclusionList करने के लिए अपने आवेदन जोड़ने के लिए, या टैब, और "रिपोर्टिंग अक्षम त्रुटि" विकल्प का चयन, या
  • आप, प्रशासनिक उपकरण में सेवाएं कंसोल पर नेविगेट कर सकते सेवा रिपोर्टिंग त्रुटि मिल जाए, गुण में जाने और अक्षम यह
1

आप जिस तरह से "अक्षम त्रुटि रिपोर्टिंग" C/C++ रनटाइम विभिन्न त्रुटियों (_CrtSetReportHook, _CrtSetReportMode, _CrtSetReportFile, _CrtSetReportHook2)

7

तुम भी programaticaly SetErrorMode का उपयोग कर कुछ इस तरह कर सकते हैं। अधिक जानकारी के लिए this आलेख देखें।

SetErrorMode(GetErrorMode() | SEM_NOGPFAULTERRORBOX); 

ऊपर 'ओ आर' हमारे वांछित इसके साथ वर्तमान मोड:

कि यह कैसे उपयोग करने के लिए की एक साधारण उदाहरण निम्न करने के लिए है।

+1

इसी तरह की नस पर, मुझे लगता है कि "_set_abort_behavior (0, _WRITE_ABORT_MSG)" को कॉल करना महत्वपूर्ण है; "भविष्य में शामिल होने पर आपका एप्लिकेशन विफल हो जाता है क्योंकि कोई" abort() "(डीबग में एक बेकार सी ++ अपवाद के लिए डिफ़ॉल्ट व्यवहार IIRC बनाता है) । – pauldoo

2

आरकेबी ने कहा कि यदि आप Windows XP 64bit चला रहे हैं, तो मानों के दो सेट हैं। HKLM में सामान्य रजिस्ट्री स्थान और Wow6432Node कुंजी के अंतर्गत वाले लोग। दोनों को अपडेट करने के लिए, %SYSTEMROOT%\system32 और %SYSTEMROOT%\SysWOW64 दोनों से drwtsn32.exe -i चलाएं।

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