Проблемы с использованием gperftools в Mac OS X

Я нашел несколько противоречивых ответов по этой теме. Эта запись блога требует libuwind, но это не работает на Mac OS X. Я включил #include <google/profiler.h> в моем коде, однако, мой компилятор (g++) не смог найти библиотеку. Я установил gperftools через доморощенный. Кроме того, я нашел этот вопрос stackru, показывающий это:

Затем я запустил pprof для генерации вывода:

[hidden ~]$ pprof --text ./a.out cpu.profile 
Using local file ./a.out.
Using local file cpu.profile.
Removing __sigtramp from all stack traces.
Total: 282 samples
     107  37.9%  37.9%      107  37.9% 0x000000010d72229e
      16   5.7%  43.6%       16   5.7% 0x000000010d721a5f
      12   4.3%  47.9%       12   4.3% 0x000000010d721de8
...

Выполнение этой команды (без каких-либо предыдущих шагов) дает мне следующее:

[hidden]$ pprof --text ./a.out cpu.profile 
Using remote profile at ./a.out.
Failed to get the number of symbols from http://cpu.profile/pprof/symbol

Почему он пытается получить доступ к интернет-сайту на моем компьютере и локальному файлу на своем компьютере?

Попытка связать lib profiler как пробный прогон с g ++ дает мне:

[hidden]$ g++ -l libprofiler
ld: library not found for -llibprofiler
clang: error: linker command failed with exit code 1 (use -v to see invocation)

Я просмотрел справочные страницы, текст справки, официальное онлайн-руководство, сообщения в блогах и многие другие источники.

Я так растерялся прямо сейчас. Может кто-нибудь помочь мне использовать gperftools?

Результатом моего разговора с @osgx стал этот скрипт. Я попытался немного почистить это. Скорее всего, он содержит довольно много ненужных опций.

2 ответа

Решение

В блоге https://dudefrommangalore.wordpress.com/2012/02/09/profiling-c-code-using-google-performance-tools/ "Профилирование кода C++ с помощью Google Performance Tools" 2012 от dudefrommangalore пропущен важный шаг.

Вы должны связать свою программу (которую вы хотите профилировать) с библиотекой cpu profiler библиотеки gperftools.

Проверьте официальное руководство: http://goog-perftools.sourceforge.net/doc/cpu_profiler.html, часть "Ссылки в библиотеке"

добавлять -lprofiler к шагу времени соединения для вашего исполняемого файла. (Также возможно добавить в профилировщик во время выполнения, используя LD_PRELOAD, но это не обязательно рекомендуется.)

Второй шаг - собрать профиль, запустить код с включенным профилированием. В мире Linux это было сделано путем установки управляющей переменной среды CPUPROFILE перед запуском:

CPUPROFILE=name_of_profile ./program_to_be_profiled

Третий шаг заключается в использовании pprof (google-pprof в мире убунту). Проверьте, что там не пусто name_of_profile создан файл профиля; если такого файла нет, pprof попытается выполнить удаленную выборку из профиля (вы видите вывод такой попытки).

pprof ./program_to_be_profiled name_of_profile

Сначала вам нужно запустить вашу программу с включенным профилированием.

Обычно это сначала связывание вашей программы с libprofiler, а затем запуск ее с помощью CPUPROFILE=cpu.profile.

Т.е.

$ CPUPROFILE = cpu.profile my_program

Я думаю, что более поздний шаг - это то, что вы упустили.

Программа создаст этот файл cpu.profile при выходе. И тогда вы можете использовать pprof (предпочтительно с github.com/google/pprof) для визуализации / анализа.

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