में रिलीज में जोर देने के लिए कैसे करें मुझे केवल जहाज निर्माण चलाने की आवश्यकता है और मुझे समस्या को ठीक करने के लिए रिलीज बिल्ड में कुछ शर्त पर जोर देने की आवश्यकता है। मैं यह कैसे करुं?सी/सी ++
सी/सी ++
उत्तर
NDEBUG मैक्रो undefine - आप इस स्थानीय स्तर पर कर सकते हैं का दावा है आप के आसपास निर्माण में रहना चाहते हैं:
#undef NDEBUG
#include <assert.h> // reinclude the header to update the definition of assert()
या जो भी आप ऐसा करने के लिए अपने निर्माण प्रक्रिया में NDEBUG मैक्रो को परिभाषित नहीं करता की जरूरत है प्रथम स्थान।
यदि assert.h पीएच फ़ाइल में शामिल है, तो यह काम नहीं करेगा। –
मैंने अभी कोशिश की है - यह हमेशा काम नहीं करता है। अगर मैं इसे अपने .cpp में पहली दो पंक्तियों के रूप में रखता हूं तो यह कुछ भी नहीं करता है, यह तब भी काम करता है जब मैं इसे अपने मुख्य() से ऊपर रखता हूं। –
तब ऐसा लगता है कि कुछ एनडीईबीयूजी को फिर से परिभाषित करना होगा और फिर 'assert.h' सहित) (संभवतः कुछ अन्य शीर्षलेख शामिल किए जा रहे हैं)। –
एएसएसईआरटी का डिफ़ॉल्ट व्यवहार डीबग कॉन्फ़िगरेशन के तहत प्रोग्राम को निरस्त करना है, लेकिन यह आमतौर पर रिलीज कॉन्फ़िगरेशन के तहत नो-ऑप बन जाता है। मेरा मानना है कि यह प्रीप्रोसेसर एनडीईबीयूजी मैक्रो के अस्तित्व की जांच करके करता है। मैं इस समय काम पर नहीं हूं इसलिए यह जांच नहीं सकता है।
मुझे लगता है कि इसके आसपास सबसे आसान तरीका डीबग कॉन्फ़िगरेशन को संशोधित करना है ताकि सभी ऑप्टिमाइज़ेशन को रिलीज़ (ओ 2 मेमोरी से) के समान स्तर तक चालू किया जा सके और फिर अपने सॉफ़्टवेयर को फिर से बनाया जा सके। यह आपको रिलीज बिल्ड के बराबर प्रदर्शन और गति प्रदान करेगा, लेकिन यह अभी भी एनडीईबीयूजी प्रीप्रोसेसर मैक्रो को परिभाषित करेगा जिसका मतलब है कि सभी असफल एएसएसईआरटी अभी भी कार्यक्रम को निरस्त कर देगा। बस बाद में अनुकूलन स्तर को बदलने के लिए याद रखें, अन्यथा आपको डीबग कॉन्फ़िगरेशन के तहत समस्या निवारण में समस्या होगी।
सामान्य रूप से, एएसएसईआरटी का उपयोग केवल पूर्व शर्त प्रोग्रामिंग के लिए किया जाना चाहिए और कभी भी शिपिंग सॉफ़्टवेयर में विफलताओं को संभालने के लिए नहीं किया जाना चाहिए। आप विकास के दौरान जल्दी विफल करना चाहते हैं, लेकिन उपयोगकर्ता के सामने शानदार विफल करना चाहते हैं।
क्यों न सिर्फ अपने खुद के ज़ोर को परिभाषित:
#define assert(x) MessageBox(...);
ऊपर मतदान किया क्योंकि यह केवल एकमात्र साइन सुझाव है। हालांकि एक लाइन नंबर डालने की सिफारिश करें और गलत क्या हुआ है इसकी व्याख्या। यद्यपि अगली बात यह भी है कि आप अपनी खुद की दुर्घटना प्रणाली को डिज़ाइन करें ताकि जब कोई जोर दे, तो आप एक मेमोरी डंप करते हैं जो स्वचालित रूप से आपको भेज दिया जाता है। – Chad
मुझे यह पसंद है, लेकिन एक छः साल के अंत में सुझाव देना चाहते हैं - अपने दावे के लिए एक अलग नाम का उपयोग करें जिसे आप रिलीज में डिबग करना चाहते हैं और 'ndbgassert' या इसी तरह के डिबग बिल्डों में मौजूद होना चाहते हैं। इस तरह आप दोनों के बीच चयन कर सकते हैं। –
संदेशबॉक्स पर जोर कैसे दिया जाता है ?? क्या यह पहले स्थिति की जांच नहीं करनी चाहिए? – yairchu
बस सीधे assert
मैक्रो परिभाषा यह है कि रिलीज मोड में सक्रिय है का हिस्सा कहते हैं।
this great article by Miro Samek में सी ++ में दावे के लिए आप बहुत उपयोगी परिभाषाएं पा सकते हैं। फिर आप अपनी जरूरतों को पूरा करने के लिए उन्हें थोड़ा सा ट्विक कर सकते हैं। उदाहरण के लिए, आप एक और मैक्रो, release_assert
बना सकते हैं, जो कि जैसा कि रिलीज़ या डीबग मोड में है, भले ही यह वही है।
मुझे इसे किसी std :: runtime_error से व्युत्पन्न कुछ प्रकार के assert_exception को फेंकने के लिए परिभाषित करना पसंद है। फिर इसे कहीं पकड़ो और कुछ उपयोगी करें।
दरअसल - यदि आप इसके साथ रह सकते हैं तो मैं डीबग संस्करण शिपिंग के साथ जाऊंगा। यदि आपको रिलीज़ संस्करण के प्रदर्शन की आवश्यकता नहीं है, तो डीबग का उपयोग करें। इसमें कम बग्स हैं (यह एक सकल oversimplification है और यदि आप प्रोग्राम बग से मुक्त है, तो बस रिलीज पर स्विच करने से यह नहीं बदलेगा, लेकिन चीजों के कारण संकलक डीबग मोड में करता है, बग नहीं हो सकता है और/या है कम गंभीर परिणाम)।
शायद आपके कार्यक्रम के केवल महत्वपूर्ण समय को अनुकूलित करना भी संभव है।
यह डीबगिंग को सरल बना सकता है।
ठीक है, विजुअल सी ++ में, आप कानूनी रूप से सी ++ डीबग रनटाइम वितरित नहीं कर सकते हैं, इसलिए यदि आप डीएलएल रनटाइम्स (यानी/एमडी या/एमडीडी स्विच) के साथ संकलित करते हैं तो क्लाइंट को डीबग बाइनरी वितरित करना एक समस्या हो सकती है। – paercebal
भले ही यह उत्तर कम हो गया है, मेरा मानना है कि यह एक महत्वपूर्ण बिंदु पर हिट करता है, जो धारणा है कि डेवलपर मुख्य रूप से [डीबग संस्करण] और जो जारी किया जाता है, के बीच चर के समूह को बदलना, एक अच्छा विचार नहीं है । अनुभवी डेवलपर्स इस तथ्य को प्रमाणित करेंगे कि रिलीज और डीबग संस्करण अक्सर अलग-अलग व्यवहार प्रदर्शित करते हैं। – Cameron
विजुअल स्टूडियो का उपयोग करते समय आप रिलीज बिल्ड में सक्रिय आवेषण के लिए एनडीईबीयूजी प्रीकंपेलर परिभाषा को परिभाषित कर सकते हैं।
उदाहरण के लिए आप/यू विकल्प के लिए अपने प्रॉजेक्ट सेटिंग्स में $ (undefesTheNDEBUG) सेट कर सकते हैं और फिर NDEBUG (सेट undefesTheNDEBUG = NDEBUG) के लिए वातावरण चर undefesTheNDEBUG परिभाषित या (MSBuild के साथ इसे पारित/p: undefesTheNDEBUG = NDEBUG)
- 1. सीसी
- 2. सीसी
- 3. कॉल/सीसी
- 4. सीसी .NET
- 5. मेल सीसी
- 6. ईएसएस/एमैक्स में, मैं सीसी सीजे या सीसी सीआर
- 7. कॉल/सीसी क्या है?
- 8. पीएचपी मेल, सीसी फील्ड
- 9. स्कैला में "कॉल-सीसी" पैटर्न?
- 10. लिनक्स कर्नेल संकलित करते समय सीसी, एलडी और सीसी [एम] आउटपुट जैसे कोड क्या हैं?
- 11. यह जावास्क्रिप्ट वाक्यविन्यास क्या है: {सीआई, सीसी}?
- 12. एफएफएमपीजी चार सीसी एवी कोडेक समर्थन सूची?
- 13. मेकफ़ाइल में सीसी? = क्या मतलब है?
- 14. पीट में डीपी और सीसी कैसे बदलते हैं?
- 15. मेकफ़ाइल में सीसी और एलडी क्या खड़े हैं?
- 16. सीपीएएन को बनाने के लिए पथ और सीसी
- 17. काम करने के लिए सीसी-ट्रे प्राप्त करना
- 18. कोनों को समायोजित करें और छवि को खोलें सीसी
- 19. mountainlion अप्रैल के रूप में इस 'सीसी' कमी
- 20. रिकर्सन लागू करने के लिए कॉल/सीसी का उपयोग करना संभव है?
- 21. Emacs: कैसे स्वचालित रूप से सीसी मोड डेरिवेटिव में कोलन के बाद खाली स्थान शामिल करने
- 22. क्या कोई कारण है कि Google अपनी ओपन सोर्स प्रोजेक्ट्स में सीपीपी के बजाय सीसी एक्सटेंशन का उपयोग करता है?
- 23. सीसी के लिए कोई रास्ता है: माइक्रोसॉफ्ट टीम फाउंडेशन सर्वर में किसी बग/वर्क आइटम पर कोई?
- 24. सिंक जीआईटी और क्लीयरकेस
- 25. संरचना कोड के बारे में तलाश स्पष्टीकरण cyclomatic जटिलता को कम करने के
- 26. क्या मैं .NET 4 कोड अनुबंधों का उपयोग कर सकता हूं और .NET 3.5 के साथ संगत रह सकता हूं?
- 27. मैं नेंट से क्रूज़ कंट्रोल
- 28. Ontology में कक्षाएं/उदाहरण
- 29. मेरी वेबसाइट में CCavenue भुगतान गेटवे को एकीकृत करने के लिए कैसे?
- 30. प्रतिलिपि
क्या मंच? विंडोज और विजुअल स्टूडियो? –
रिलीज बिल्ड में दावा रखने के लिए आम तौर पर अनुशंसा नहीं की जाती है। हालांकि आपके पास ऐसा करने का एक अच्छा कारण हो सकता है; फिर भी, इसे "दावा" भी नहीं कहा जा सकता है और इस मामले में इसे एक ही फ़ंक्शन कॉल का उपयोग नहीं करना चाहिए। – moala