2011-03-18 68 views
1

我希望創建一個構建的項目的構建,使其與發佈版本相同,除了使用默認分配器的調試版本(對alloc/free的canary檢查等)。編譯器/ CRT是Visual Studio 2010.未定義_DEBUG時檢查堆棧的完整性?

閱讀CRT的文檔,似乎_DEBUG需要定義調用_CrtCheckMemory(),_malloc_dbg()等以不被刪除。我不希望啓用_DEBUG定義,因爲這會影響分配器。

有沒有一種方法可以在不使用_DEBUG定義的情況下使用CRT調試分配器?

回答

1

_malloc_dbg()需要調試運行時,調試運行時需要_DEBUG - 所以,不,你不能做到這一點。

+0

好的。因此,它的_DEBUG(可能啓用優化)或滾動我自己的堆檢查... – Viktor 2011-03-18 12:06:27

+0

@Viktor:是的,或使用一些外部工具 - 見例如http://stackoverflow.com/questions/413477/is-there-a-good-valgrind-substitute-for-windows – Erik 2011-03-18 12:09:05

0

您可以找到定義_DEBUG時使用的malloc調用的名稱,並手動定義malloc以使用它?

同樣的,新的,如果你正在使用C++,你可以創建一個全球覆蓋的調試版本

+0

不起作用。如上所述,'_malloc_dbg'是調試運行時的一部分 - 使用調試運行時而不定義'_DEBUG'會中斷。 – Erik 2011-03-18 10:34:57