_CrtSetDbgFlag
函数允许应用程序来控制调试堆管理器通过修改的位域跟踪内存分配的方式_crtDbgFlag
标志标志 说明 _CRTDBG_ALLOC_MEM_DF ON:启用调试堆分配并使用内存块类型标识符
OFF:将新的分配添加到堆的链接列表,但设置阻止类型设置为_IGNORE_BLOCK_CRTDBG_CHECK_ALWAYS_DF ON:调用_CrtCheckMemory在每次分配和解除分配请求
OFF:必须显式调用_CrtCheckMemory_CRTDBG_CHECK_CRT_DF ON:包括泄漏检测和内存状态差异操作中的_CRT_BLOCK类型
OFF:这些操作将忽略运行时库在内部使用的内存_CRTDBG_DELAY_FREE_MEM_DF ON:将已释放的内存块在堆链接列表中,将它们分配_FREE_BLOCK键入,然后使用字节值0xDD填充它们
OFF:不要将已释放的块保留在堆链接列表中_CRTDBG_LEAK_CHECK_DF ON:执行自动泄露检查在程序退出时通过调用_CrtDumpMemoryLeaks,则生成错误报告,如果应用程序未能释放其所分配的所有内存
OFF:不要在程序退出时自动执行泄露检查_CrtDumpMemoryLeaks
显示内存泄漏的报告信息_malloc_dbg
在具有额外空间的堆中为调试标头和覆盖缓冲区分配内存块#if defined(_WIN32) #ifdef _DEBUG #define _CRTDBG_MAP_ALLOC #include <stdlib.h> #include <crtdbg.h> #define new new( _CLIENT_BLOCK, __FILE__, __LINE__) #endif #endif
_CrtSetBreakAlloc
在指定的对象分配序号上设置断点_CrtCheckMemory
确定分配在调试堆得内存块的完整性SetUnhandledExceptionFilter
捕获程序未处理的异常MiniDumpWriteDump
生成程序快照
-fsanitize=address
编译参数,报告内存泄漏信息gcore dumpfilepath
gdb
命令,生成程序快照。调试快照使用gdb exepath dumpfilepath
- 设置系统生成
core dump
/etc/security/limits.conf
添加soft core unlimited
/proc/sys/kernel/core_pattern
添加/root/corefile/core-%e-%s-%p-%t
objcopy --only-keep-debug debugexe exe.symbol
生成调试符号gdb --symbol=exe.symbol -exec=exefilepath
使用调试符号调试发行版gdb --symbol=debugexe -exec=exefilepath
使用调试版程序调试发行版gdb
设置动态库符号路径set solib-search-path debugsopath