gperftools - файл профиля не выгружен
Я настроил и собрал gpreftools. тем не менее, я не могу найти сгенерированный файл профиля моей программы для его отображения.
Я предпринял следующие действия:
Добавление
-lprofiler
флаг компоновщика моего.pro
, сборка программы и флаг добавляется правильно на этапе связывания.QMAKE_LFLAGS += -lprofiler
Работает с:
$ CPUPROFILE=/tmp/prof.out /path/to/executable
Выполнение:
$ 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.