神秘的 _DEBUG 宏从何处来?

调试实战 —— dll 加载失败之Debug Release争锋篇》中,由于两个工程中的 _ITERATOR_DEBUG_LEVEL 不同,导致了对同一个 map 的解析不同,从而导致了崩溃。在示例代码中,我是手动更改的该宏的值,在实际工程中,却另有玄机。在上文中故意省略了这部分内容的介绍。现把实际工程的问题在本文中做个相对详细的梳理总结。

先剧透一下:实际工程中的问题是因为一个工程中定义了 _DEBUG 宏,另外一个工程里没定义。但是我已经核对过,两个工程都没定义 _DEBUG 宏。其中一个工程的 _DEBUG 宏是从哪儿来的呢?

全局变量初始化顺序探究》里已经介绍过了)。

build-with-msbuild
build-with-msbuild

可以发现,直接使用 msbuild.exe 编译也会定义 _DEBUG 宏。可以把 vs 从怀疑名单中划掉了。

注意看传递给 cl.exe 的参数(上图黄色高亮部分)中也没有 _DEBUG 宏的踪影。

难道是 msbuild 通过进程通信手段实现的?(真佩服自己的脑洞)

试试直接使用 cl.exe TestDebugMacro.cpp 编译。

https://docs.microsoft.com/en-us/cpp/build/reference/md-mt-ld-use-run-time-library?view=vs-2019

内容来源于网络如有侵权请私信删除

文章来源: 博客园

原文链接: https://www.cnblogs.com/bianchengnan/p/13174125.html

你还没有登录,请先登录注册
  • 还没有人评论,欢迎说说您的想法!