tcmalloc не генерирует трассировки стека
Я запускаю двоичный файл, связанный с 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());
Есть идеи, как отладить это?
1 ответ
Я бы предложил попробовать собрать программу с помощью -fno-omit-frame-pointer (gcc), так как указатели фреймов могут понадобиться для получения трассировки стека в некоторых установках.
tcmalloc обычно использует libunwind для получения трассировки стека, но из-за проблем взаимоблокировки это не везде доступно.
Интересная информация будет, если сгенерированный файл (в данном случае /tmp/prog.15062.prog-end.heap) содержит несколько адресов.