_CRTDBG_MAP_ALLOC 不显示文件名和行号

Posted

技术标签:

【中文标题】_CRTDBG_MAP_ALLOC 不显示文件名和行号【英文标题】:_CRTDBG_MAP_ALLOC not showing file name and line number 【发布时间】:2020-08-31 12:25:03 【问题描述】:

我使用 Visual Studio 2017。我使用转储内存泄漏的动态库:_CrtDumpMemoryLeaks(); 我添加了适当的宏定义:

#define _CRTDBG_MAP_ALLOC

但输出仍然不包含文件名和行号。当我调试那个 dll 时,我可以进入 以下 malloc 定义:

//
// malloc.cpp
//
//      Copyright (c) Microsoft Corporation. All rights reserved.
//
// Implementation of malloc().
//
#include <corecrt_internal.h>
#include <malloc.h>



// Allocates a block of memory of size 'size' bytes in the heap.  If allocation
// fails, nullptr is returned.
//
// This function supports patching and therefore must be marked noinline.
// Both _malloc_dbg and _malloc_base must also be marked noinline
// to prevent identical COMDAT folding from substituting calls to malloc
// with either other function or vice versa.
extern "C" _CRT_HYBRIDPATCHABLE __declspec(noinline) _CRTRESTRICT void* __cdecl malloc(size_t const size)

    #ifdef _DEBUG
    return _malloc_dbg(size, _NORMAL_BLOCK, nullptr, 0);
    #else
    return _malloc_base(size);
    #endif

另一方面,当我在 Visual Studio 中创建一个简单的控制台应用程序时,我无法进入 malloc,但内存泄漏输出显示文件名和行号。这是怎么回事 ?如何解决?

【问题讨论】:

【参考方案1】:

文档Find memory leaks with the CRT library中描述的技术。

关键是你需要在任何#include之前添加以下3行:

#define _CRTDBG_MAP_ALLOC
#include <stdlib.h>
#include <crtdbg.h>

【讨论】:

以上是关于_CRTDBG_MAP_ALLOC 不显示文件名和行号的主要内容,如果未能解决你的问题,请参考以下文章

C语言中定义的__FILE__使用,如何只出现该文件名,而不显示路径

Ueditor——多文件上传选择和显示的顺序不一致

如果 __autoload 中的文件有语法错误,则脚本将停止而不显示消息

使用 PyInstaller 创建的 .exe 文件不显示其 GUI

VSCODE 设置不可见文件的隐藏,特定文件不显示在文件列表中

pythonunittest报告样式不显示