gperftools - файл профиля не выгружен

Я настроил и собрал gpreftools. тем не менее, я не могу найти сгенерированный файл профиля моей программы для его отображения.

Я предпринял следующие действия:

  1. Добавление -lprofiler флаг компоновщика моего .pro, сборка программы и флаг добавляется правильно на этапе связывания.QMAKE_LFLAGS += -lprofiler

  2. Работает с:$ CPUPROFILE=/tmp/prof.out /path/to/executable

  3. Выполнение:$ pprof --gv /path/to/MyExe /tmp/prof.out

Тогда я получаю следующее:

Failed to get profile: curl -s --max-time 90 'http:///pprof/profile?seconds=30' > /home/eslam/pprof/.tmp.MyExe.1509005857.: No such file or directory.

У кого-нибудь есть решение по этому поводу?

1 ответ

Решение

Убедитесь, что ваша программа действительно ссылается на libprofiler.so. Некоторые операционные системы (например, AFAIK, некоторые версии ubuntu) фактически не добавляют.so, если ни один из символов не используется. Например, ldd./yourprogram должен перечислить libprofiler.so. Если этого не произойдет, вы должны добавить что-то вроде -Wl, - no-as-required для ваших флагов компоновщика.

Помимо прохождения -Wl,--no-as-needed,-lprofiler,--as-neededво время сборки, упомянутого Eslam, вы также можете заставить его работать, не изменяя сборку, передавLD_PRELOAD вариант во время выполнения как:

LD_PRELOAD=/usr/lib/x86_64-linux-gnu/libprofiler.so CPUPROFILE=prof.out ./main.out

Ты можешь найти libprofiler.so легко с locate libprofiler.so.

См. Также: Как профилировать код C++, работающий в Linux?

Протестировано в Ubuntu 18.04.

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