首页 > 解决方案 > 在日志中获取函数名称和行号

问题描述

我真的需要帮助来调试一些不断出现的内存损坏错误。一些信息:

我已经下载并安装了 dmalloc 并在所有源文件中包含了 dmalloc.h 并传递了标志 -DDMALLOC_FUNC_CHECK (我正在使用 CMake 设置(CMAKE_CXX_FLAGS "-DMALLOC_FUNC_CHECK")。

现在用 dmalloc 替换 malloc 和 free 运行时,程序在 malloc 处终止,我得到以下日志输出

1612369583: 1080: Dmalloc version '5.6.5' from 'http://dmalloc.com/'
1612369583: 1080: flags = 0x4f4e903, logfile 'dmalloc-log'
1612369583: 1080: interval = 10, addr = 0x0, seen # = 0, limit = 0
1612369583: 1080: threads enabled, lock-on = 0, lock-init = 2
1612369583: 1080: starting time = 1612369583
1612369583: 1080: process pid = 23374
1612369583: 1080: WARNING: tried to free(0) from 'unknown'
1612369583: 1082: WARNING: tried to free(0) from 'unknown'
1612369583: 1084: WARNING: tried to free(0) from 'unknown'
1612369583: 1086: WARNING: tried to free(0) from 'unknown'
1612369583: 1088: WARNING: tried to free(0) from 'unknown'
1612369583: 1090: WARNING: tried to free(0) from 'unknown'
1612369583: 1092: WARNING: tried to free(0) from 'unknown'
1612369583: 1095: WARNING: tried to free(0) from 'unknown'
1612369583: 1098: WARNING: tried to free(0) from 'unknown'
1612369583: 1101: WARNING: tried to free(0) from 'unknown'
1612369583: 1104: WARNING: tried to free(0) from 'unknown'
1612369583: 1107: WARNING: tried to free(0) from 'unknown'
1612369587: 1110:   error details: checking free pointer
1612369587: 1110:   pointer '0x7f541b272e80' from 'unknown' prev access 'unknown'
1612369587: 1110:   dump of '0x7f541b272e80'0: '\002\000\2253\177\000\000\001\000\000\000\000\000\000\000\000\337\337\337\337'
1612369587: 1110: ERROR: _dmalloc_chunk_heap_check: free space has been overwritten (err 67)

关于如何获取函数名称和行号而不是“未知”的任何想法?根据包括 dmalloc.h 在内的文档并传递该标志就足够了。此外,我使用 C++ 的事实让我不确定这是否可能。

有没有人能够从该日志中看到任何有用的信息?dmalloc 文档 asys 关于此错误的以下内容:

67 (ERROR_FREE_OVERWRITTEN) 可用空间已被覆盖“如果启用了 free-blank 或 check-blank 令牌,那么当使用“dmalloc-free”字节(十六进制 0xdf,八进制 0337,十进制 223)释放内存时,库将覆盖内存). 如果程序写入此空间,则库将检测写入并触发此错误。这可能表明程序在释放后正在使用指针“

这告诉我 dmalloc 正在检测该内存之前已被释放。但是我没有看到重新分配已释放的堆缓冲区的问题?

非常感谢您的帮助

标签: c++debuggingsegmentation-faultheap-memorydmalloc

解决方案


推荐阅读