Профилировщик кучи gperftools не выводит информацию в многопоточность

Я пытаюсь понять профилирование кучи и потоки STD, но я получаю ошибку во время выполнения, которую я не могу понять. Мой код:

 #include <memory>
#include <gperftools/heap-profiler.h>
#include <thread>
using namespace std;

void fcn1() // no leaks
{
HeapProfilerStart("temp1");
for(auto i=0; i<10000; i++)
{
unique_ptr<long long> t(new long long);
*t = 10;
}
HeapProfilerDump("partial1");
HeapProfilerStop();
}

int fcn2() // leaks
{
HeapProfilerStart("temp2");
for(auto i=0; i<10000; i++)
{
long* t = new long;
*t = 10;
}
HeapProfilerDump("partial2");
HeapProfilerStop();
}

int main(void)
{
thread t1(fcn1);
thread t2(fcn2);
t1.join();
t2.join();
return 0;
}

У меня есть 2 проблемы, с которыми у меня проблемы.

  1. Как, только первый файл сбрасывается (temp1.0001.heap). Почему это так?
    Разве это не должно ждать завершения обоих потоков перед завершением? Если я не обработаю это в многопоточной среде (то есть вызов fcn1, затем fcn2), то появятся оба. Это проблема с gperftools или расой или как?

Выход:

 Starting tracking the heap
Dumping heap profile to temp1.0001.heap (partial2)
  1. Если я закомментирую HeapProfilerDump звонки, нет файла вывода, т.е. ничего в дампе. Разве он не должен выгружать файл профиля, когда он останавливается, или это что-то, что должно быть сделано вручную?

0

Решение

Задача ещё не решена.

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]