क्या कोई मानकीकृत (उदाहरण के लिए सभी प्रमुख कंपाइलर्स द्वारा कार्यान्वित किया गया है) # परिभाषित करें जो मुझे डीबग और रिलीज बिल्ड के बीच अंतर करने की अनुमति देगा?सी/सी ++: डीबग/रिलीज का पता लगाने के लिए पोर्टेबल तरीका?
उत्तर
अगर विश्वास है
#ifdef NDEBUG
// nondebug
#else
// debug code
#endif
सबसे पोर्टेबल है।
लेकिन कोई कंपाइलर जानता है कि आप डीबग या रिलीज संकलित कर रहे हैं, तो यह स्वचालित नहीं है। लेकिन सी-रनटाइम में assert.h द्वारा इसका उपयोग किया जाता है, इसलिए यह काफी आम है। विजुअल स्टूडियो इसे सेट करेगा, और मुझे यकीन है कि अधिकांश अन्य आईडीई की इच्छा भी होगी।
मोर्चे पर _ की कमी से संकेत मिलता है कि इसका शायद सी या सी ++ मानकों में कहीं उल्लेख किया गया है। एमएस पिछले रिलीज में किसी भी गैर मानक मैक्रो या उनके सी-रनटाइम हेडर फ़ाइलों में फ़ंक्शन को '_ के –
' के साथ उपसर्ग करने के लिए बहुत ही सावधान रहा है, यह वही नहीं है। एनडीईबीयूजी को परिभाषित करना मैक्रोज़ को बंद कर देता है। और कुछ नहीं। यह __NOT__ डीबग का मतलब है। –
@ मार्टिन: वास्तव में nondebug। और अगर यह इरादा मैक्रोज़ को _only_ बंद करने का इरादा था, तो वे इसे नोएसर कहते थे। अंक लेने से पहले आपको वास्तव में जो लिखा था उसे पढ़ना चाहिए। –
संपादित करें: मैंने प्रश्न को गलत तरीके से पढ़ा और एक अलग स्पर्शरेखा पर बंद कर दिया !!! क्षमा याचना ... मैक्रो _NDEBUG लिनक्स पर साथ ही विंडोज पर के रूप में प्रयोग किया जाता है ...
द्विआधारी बनाया गया है और आप आप एक हेक्साडेसिमल डंप प्राप्त कर सकते हैं निर्धारित करने के लिए करता है, तो निर्माण रिहाई/डिबग था की जरूरत है, अगर आप इसमें प्रतीकों का भार देखते हैं जो डीबगिंग जानकारी होगी ... उदाहरण के लिए, लिनक्स के तहत, strings उपयोगिता का उपयोग करना। SysInternals द्वारा विंडोज के लिए एक संस्करण उपलब्ध है, यहां technet पर उपलब्ध है। द्विआधारी निष्पादनयोग्य के रिलीज संस्करणों विभिन्न प्रतीकों का प्रतिनिधित्व तार नहीं होगा ...
strings some_binary
आशा इस मदद करता है, सादर, टॉम।
जरूरी नहीं है; प्रतीकों के साथ द्विआधारी उत्पादन करना संभव है (यानी कार्यों और स्थिर डेटा के लिए) लेकिन डीबग जानकारी (यानी लाइन नंबर) नहीं। –
उस ने कहा, उस जानकारी को प्रदान करने वाले झंडे आमतौर पर जो भी ऑब्जेक्ट फ़ाइल प्रारूप के शीर्षलेख में संग्रहीत होते हैं। जीएनयू objdump का प्रयास करें (विंडोज़ के लिए एक संस्करण भी है, MinGW के साथ वितरित): objdump -x –
चूंकि डीबग या रिलीज की कोई मानक परिभाषा नहीं है, ऐसा करने का कोई तरीका नहीं है। मैं कम से कम चार अलग-अलग चीजों के बारे में सोच सकता हूं जिसका मतलब हो सकता है, और वे सभी स्वतंत्र रूप से बदला जा सकता है। कोड के भीतर से केवल दो का परीक्षण किया जा सकता है।
- संकलक अनुकूलन स्तर
- डिबगिंग प्रतीकों बाइनरी में शामिल (इन यहां तक कि एक बाद की तारीख में हटाया जा सकता है)
- ज़ोर() सक्षम (NDEBUG परिभाषित नहीं)
- प्रवेश
- 1. वेब स्क्रैपिंग का पता लगाने का तरीका
- 2. का पता लगाने के लिए Ctrl +
- 3. माइम प्रकार का पता लगाने के लिए एक प्रकार की फाइल का पता लगाने का सबसे अच्छा तरीका है?
- 4. मेमोरी पेज आकार का पता लगाने
- 5. स्वाइप पता लगाने के लिए
- 6. क्या यह पता लगाने के लिए एक पोर्टेबल तरीका है कि वीएम के अंदर से जेवीएम कितनी फाइलें खुलती है?
- 7. आवाज का पता लगाने
- 8. ऑटोबॉक्सिंग का पता लगाने के लिए उपकरण का निर्माण?
- 9. मोबाइल मेल क्लाइंट का पता लगाने का मानक तरीका?
- 10. चुटकी का पता लगाने का सबसे आसान तरीका
- 11. पृष्ठ का पता लगाने का तरीका बैक बटन
- 12. फ्लैश ब्लॉकर्स का पता लगाने का कोई तरीका है?
- 13. केंद्रित नियंत्रण परिवर्तन का पता लगाने का लचीला तरीका
- 14. क्या यह आईपैड का पता लगाने का सही तरीका है?
- 15. UITextField में बैकस्पेस का पता लगाने का सही तरीका
- 16. जावास्क्रिप्ट कोड का पता लगाने का सबसे अच्छा तरीका
- 17. जावास्क्रिप्ट में टूटी हुई छवियों का पता लगाने का तरीका?
- 18. आयरनपीथन का पता लगाने का सबसे अच्छा तरीका
- 19. पार्क किए गए पृष्ठ का पता लगाने का तरीका?
- 20. आईओएस क्रोम का पता लगाने
- 21. jQuery ब्राउज़र का पता लगाने?
- 22. चिपमंक टकराव का पता लगाने
- 23. उपयोगकर्ता गतिविधि का पता लगाने
- 24. सीसी
- 25. हार्डवेयर की बिट चौड़ाई का पता लगाने के लिए कोई मानक तरीका है?
- 26. स्मृति रिसाव का पता लगाने के लिए CppUnit का उपयोग
- 27. संपत्ति प्रकार का पता लगाने के लिए PropertyInfo का उपयोग
- 28. डब्ल्यूसीएफ संदेश आकार का पता लगाने के लिए कैसे?
- 29. बिजली से जुड़े राज्य का पता लगाने के लिए कैसे?
- 30. जावास्क्रिप्ट में JSON समर्थन का पता लगाने के लिए कैसे?
असल में मैं जिस प्रमुख परियोजना पर काम करता हूं, हम अपनी रिलीज में डिबगिंग करते रहते हैं, लेकिन यह रन-टाइम पर वर्बोजिटी निर्धारित करता है। यह जंगली में बग-शिकार में उपयोगी साबित हुआ है, सक्षम होने पर न्यूनतम (_very_ नोटिस करने के लिए कठिन; कोई उपयोगकर्ता शिकायत नहीं) ओवरहेड। एम्बेडेड वातावरण के बाहर, मैं इस तरह के दृष्टिकोण पर विचार करता हूं। – mctylr
"रिलीज बिल्ड" क्या है? सी ++ मानक इसे परिभाषित नहीं करता है, इसलिए यह पता लगाने के लिए कोई पोर्टेबल तरीका नहीं है कि कुछ रिलीज बिल्ड है या नहीं। – jalf