Visual C++ CRT debugging

Visual C++ CRT debugging

本文关键字:debugging CRT C++ Visual      更新时间:2023-10-16

当我开始使用这里讨论的调试时,我遇到了一个非常严重的链接器错误。

我设法把它缩小到new ( _NORMAL_BLOCK , __FILE__ , __LINE__ )结构。新操作员的这种过载一使用,我就得到了error LNK2005: "void __cdecl operator delete(void *,int,char const *,int)" (??3@YAXPEAXHPEBDH@Z) already defined in ...

如果我将该对象文件从链接过程中排除,它只会将我指向另一个对象文件。我还没有验证这一点,但我很确定,所有这些与MFC冲突的对象文件都使用了调试新版本的运算符。

这让我陷入了一场疯狂的追逐,因为如果你用谷歌搜索这个错误,所有的证据都会告诉你,你把CRT和MFC的东西按错误的顺序混合在一起,果不其然,这就是我所做的。

我用dumpbin /directives浏览了我所有的对象文件和库,并确保链接的顺序是正确的,尽管如此,我从未克服这个错误。

CRT调试技术是否固有地与MFC不兼容,或者对此有解释吗?

我对MFC不是很了解,我正试图完全脱离MFC,但我希望在这之前让它发挥作用。

MFC应用程序将在调试模式下为您检测内存泄漏。要获得有关泄漏的更多信息,可以在每个文件的顶部定义新的DEBUG_new,如下所示:

#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif

有关更多信息,请参阅MSDN文章MFC 中的内存泄漏检测