2009-02-06 14 views
10

, sihirbaz hemen her CPP dosyasındaki aşağıdaki kod bloğunu oluşturur:"#define new DEBUG_NEW" ve "#undef THIS_FILE" vs. gerçekten gerekli mi? Yeni bir MFC uygulaması oluşturduğunuzda

#ifdef _DEBUG 
#define new DEBUG_NEW 
#endif 

ve bazen de bu ekler:

#undef THIS_FILE 
static char THIS_FILE[] = __FILE__; 

Ben kaldırmak istiyorum Bu kod CPP dosyalarından gereksiz ise. VS2008 üzerinde C++/CLI ile bir MFC uygulaması kullanıyorum.

Bu kodu bir CPP'den sildikten sonra Debug'da çalıştırmayı denedim ve iyi çalışıyor gibi görünüyor. "new" ing değişkenleri iyi çalışır, sızıntı yoktur ve ASSERT iletişim kutuları doğru dosya adını gösterir ve hatalı satırlara atlar.

Bana ne yaptığını ve silinen güvenli olup olmadığını söyleyen var mı?

cevap

10

Bunu silmek tamamen güvenlidir. Bu bir hata ayıklama yardımcısıdır; programdan çıkarken sahip olduğunuz bellek sızıntılarının çıkış penceresinde uyarı üretecektir.

+0

Emin misiniz? Kod bloğunu sildikten sonra VS2008 hala bellek sızıntısı nesnesi görüntüler. Belki bu VC6 ya da başka bir şey için kullanılan ...? – demoncodemonkey

+1

Maalesef, söylediğin şeyin bir inceliği olduğunu anladım - kod çıktığında, bellek sızıntısı olduğunu göstermek yerine, çıktı penceresi bellek sızıntısını içeren dosya adını ve satırı gösterir. – demoncodemonkey

+0

Bu, oluşturulan kodun ilk bölümünü açıklıyor. İkinci kısımdan ne haber? #UNUM THIS_FILE statik char THIS_FILE [] = __FILE__; – demoncodemonkey

1

Microsoft Visual C++ 2010'da, tüm kodu kaldırabilir ve bir başlıkta yalnızca bir #define NEW DEBUG_NEW koyup, hala doğru bellek sızıntısı raporlarına sahibim.

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

Hayır, tüm bilgiyi almazsın. Gösterdiğiniz kodun, yalnızca bir CString nesnesini (veya somesuch) sızdırdığını belirten "strcore.cpp" ifadesindeki sızıntıyı gösterdiğine dikkat edin. Doğru DEBUG_NEW/THIS_FILE ofseti ile, aynı zamanda * yeni * yaptığınız * kodunuzu da –