我正在运行与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());
关于如何调试这个的任何想法?
答案 0 :(得分:1)
我建议尝试使用-fno-omit-frame-pointer(gcc)来构建程序,因为在某些设置中可能需要帧指针才能获得堆栈跟踪。
tcmalloc通常使用libunwind来获取堆栈跟踪,但由于死锁问题,这在任何地方都无法使用。
一个有趣的信息是生成的文件(在这种情况下为/tmp/prog.15062.prog-end.heap)包含一些地址。