Проблемы с использованием 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) для визуализации / анализа.