2009-02-06 3 views
10

जब आप एक नया MFC आवेदन बनाने के लिए, जादूगर लगभग हर सीपीपी फ़ाइल में कोड की निम्न ब्लॉक बनाता है:"#Dfine new DEBUG_NEW" और "#undef THIS_FILE" आदि वास्तव में आवश्यक हैं?

#ifdef _DEBUG 
#define new DEBUG_NEW 
#endif 

और कभी कभी यह भी इस जोड़ता है:

#undef THIS_FILE 
static char THIS_FILE[] = __FILE__; 

मैं निकालना चाहते हैं यह कोड मेरी सीपीपी फाइलों से अगर यह अनावश्यक है। मैं वीएस -2008 पर सी ++/सीएलआई के साथ एक एमएफसी ऐप का उपयोग कर रहा हूं।

मैंने सीपीपी से इस कोड को हटाने के बाद डीबग में दौड़ने की कोशिश की है, और ऐसा लगता है कि यह ठीक काम करता है। "नया" आईएनजी वैरिएबल ठीक काम करता है, कोई रिसाव नहीं है, और एएसएसईआरटी संवाद सही फ़ाइल नाम दिखाते हैं और अपमानजनक रेखा पर कूदते हैं।

क्या कोई मुझे बता सकता है कि यह क्या करता है और क्या इसे हटाना सुरक्षित है?

उत्तर

10

यह इसे हटाने के लिए पूरी तरह से सुरक्षित है। यह एक डीबगिंग सहायता है; इसे छोड़कर प्रोग्राम बाहर निकलने पर आपके पास मौजूद किसी भी मेमोरी लीक की आउटपुट विंडो में चेतावनियां उत्पन्न करेगा।

+0

क्या आप निश्चित हैं? कोड ब्लॉक हटा दिए जाने के बाद भी VS2008 अभी भी मेमोरी लीक ऑब्जेक्ट डंप प्रदर्शित करता है। शायद यह वीसी 6 या कुछ में मामला था ...? – demoncodemonkey

+1

क्षमा करें मुझे अभी एहसास हुआ है कि आपने जो कहा है उसके लिए एक सूक्ष्मता है - जब कोड होता है तो आउटपुट विंडो फ़ाइल नाम और रेखा को स्मृति रिसाव दिखाती है, क्योंकि यह दिखाने के विपरीत कि स्मृति मेमोरी है। – demoncodemonkey

+0

ताकि जेनरेट कोड के पहले भाग को समझाया जा सके। दूसरे भाग के बारे में क्या? #undef THIS_FILE स्थिर चार THIS_FILE [] = __FILE__; – demoncodemonkey

1

माइक्रोसॉफ्ट विजुअल सी ++ 2010 पर, मैं पूरे कोड को हटा सकता हूं और शीर्षलेख में केवल एक # डिफाईन नया DEBUG_NEW डाल सकता हूं, और मुझे अभी भी सही मेमोरी लीक रिपोर्ट मिल गई है, उदा।

Detected memory leaks! 
Dumping objects -> 
f:\dd\vctools\vc7libs\ship\atlmfc\src\mfc\strcore.cpp(156) : {7508} normal block at 0x029B9598, 54 bytes long. 
Data: <    > E4 B8 C9 00 12 00 00 00 12 00 00 00 01 00 00 00 
f:\dd\vctools\vc7libs\ship\atlmfc\src\mfc\strcore.cpp(156) : {7501} normal block at 0x029B94A8, 28 bytes long. 
Data: <    > E4 B8 C9 00 05 00 00 00 05 00 00 00 01 00 00 00 
f:\source\agent\agent\deviceid.cpp(21) : {7500} normal block at 0x029CDFC0, 8 bytes long. 
Data: <  > A8 95 9B 02 B8 94 9B 02 
f:\dd\vctools\vc7libs\ship\atlmfc\src\mfc\strcore.cpp(156) : {6786} normal block at 0x029C0D88, 160 bytes long. 
Data: <  G  > E4 B8 C9 00 19 00 00 00 47 00 00 00 01 00 00 00 
f:\source\agent\sysinfo\sysinfo.cpp(27) : {6733} normal block at 0x029B84D8, 92 bytes long. 
Data: <    > 00 00 00 00 00 10 00 00 00 00 01 00 FF FF FE 7F 
Object dump complete. 
+3

नहीं, आपको पूरी जानकारी नहीं मिलती है। ध्यान दें कि आप जो कोड दिखाते हैं वह केवल 'strcore.cpp' में रिसाव दिखाता है जो इंगित करता है कि आपने एक CString ऑब्जेक्ट (या somesuch) लीक किया है। सही DEBUG_NEW/THIS_FILE ऑफसेट के साथ, यह * आपके * कोड में उस स्थान की रिपोर्ट भी करेगा जहां आपने 'नया' किया था –

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