【发布时间】:2010-09-14 07:32:48
【问题描述】:
我正在尝试调试内存泄漏问题。我正在使用 mtrace() 来获取 malloc/free/realloc 跟踪。我已经运行了我的 prog,现在有一个巨大的日志文件。到目前为止,一切都很好。但我在解释文件时遇到问题。看看这些行:
@ /usr/java/ibm-java2-x86_64-50/jre/bin/libj9prt23.so:[0x2b270a384a34] + 0x1502570 0x68
@ /usr/java/ibm-java2-x86_64-50/jre/bin/libj9prt23.so:[0x2b270a384a34] + 0x1502620 0x30
@ /usr/java/ibm-java2-x86_64-50/jre/bin/libj9prt23.so:[0x2b270a384a34] + 0x2aaab43a1700 0xa80
@ /usr/java/ibm-java2-x86_64-50/jre/bin/libj9prt23.so:[0x2b270a384a34] + 0x1501460 0xa64
奇怪的是,一个调用(相同的返回地址)负责 4 个分配。
甚至陌生人:
@ /usr/java/ibm-java2-x86_64-50/jre/bin/libj9prt23.so:[0x2b270a384a34] + 0x2aaab43a1700 0xa2c
…
@ /usr/java/ibm-java2-x86_64-50/jre/bin/libj9prt23.so:[0x2b270a384a34] + 0x2aaab43a1700 0xa80
在这两行之间,块 0x2aaab43a1700 永远不会被释放。
有人知道怎么解释吗?一次调用如何导致 4 次分配? malloc 又怎么会返回一个之前已经分配好的地址呢?
编辑 2008/09/30: 分析 GLIBC (mtrace.pl) 提供的 mtrace() 输出的脚本在这里没有任何帮助。它只会说:Alloc 0x2aaab43a1700 重复。但是怎么会这样呢?
【问题讨论】:
标签: c memory-leaks glibc mtrace