缘起
在上一篇文章 《调试实战 —— dll 加载失败之Debug Release争锋篇》中,由于两个工程中的 _ITERATOR_DEBUG_LEVEL
不同,导致了对同一个 map
的解析不同,从而导致了崩溃。在示例代码中,我是手动更改的该宏的值,在实际工程中,却另有玄机。在上文中故意省略了这部分内容的介绍。现把实际工程的问题在本文中做个相对详细的梳理总结。
先剧透一下:实际工程中的问题是因为一个工程中定义了 _DEBUG
宏,另外一个工程里没定义。但是我已经核对过,两个工程都没定义 _DEBUG
宏。其中一个工程的 _DEBUG
宏是从哪儿来的呢?
测试工程简介
为了查出 _DEBUG
宏从何而来,我特意建了一个超级简单的工程。只包含一个源文件,其内容如下:
#ifdef _DEBUG
#pragma message("---- _DEBUG defined.")
#else
#pragma message("---- _DEBUG NOT defined.")
#endif
int wmain()
{
return 0;
}
相信大家都知道,debug
会定义 _DEBUG
宏,而 release
不会定义 _DEBUG
宏。默认的 debug
和 release
中对应的 Preprocessor definition
配置对比如下图:
最开始,我以为简单的删掉 _DEBUG
宏,编译的时候就不会有 _DEBUG
宏了。