3

我正在运行一个与 tcmalloc 链接的二进制文件,它没有为它正在检测的泄漏生成堆栈跟踪。

The output says:
The 1 largest leaks:
Leak of 1401231 bytes in 82093 objects allocated from:


If the preceding stack traces are not enough to find the leaks, try running THIS shell command:

pprof ../../prog "/tmp/prog.15062.prog-end.heap" --inuse_objects --lines --heapcheck  --edgefraction=1e-10 --nodefraction=1e-10 --gv

当我运行 pprof 时,我收到一条消息,指出没有要打印的节点。

我附上了可疑内存泄漏的代码

HeapLeakChecker checker("prog");
....
assert(checker.NoLeaks());

关于如何调试的任何想法?

4

1 回答 1

1

我建议尝试使用 -fno-omit-frame-pointer (gcc) 构建程序,因为在某些设置中可能需要帧指针来获取堆栈跟踪。

tcmalloc 通常使用 libunwind 来获取堆栈跟踪,但由于死锁问题,这并非在任何地方都可用。

一个有趣的信息是生成的文件(在这种情况下是 /tmp/prog.15062.prog-end.heap)是否包含一些地址。

于 2013-01-14T17:49:06.563 回答