Профилировщик кучи gperftools не выводит информацию в многопоточность - PullRequest
0 голосов
/ 21 октября 2018

Я пытаюсь понять профилирование кучи и потоки 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)
Если я закомментирую вызовы HeapProfilerDump, файл не будет выводиться, то есть ничего в дампе.Разве он не должен выгружать файл профиля, когда он останавливается, или это должно быть сделано вручную?
...