Профилировщик кучи 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 ответов

Другие вопросы по тегам