Как интерпретировать адреса в Google perf tools CPU profiler
Моя программа на C++ потребляет много ресурсов ЦП и больше, так как она работает. Я использовал Google Performance Tools для профилирования загрузки процессора, и вот что я получил:
(pprof) top
Total: 1343 samples
1330 99.0% 99.0% 1330 99.0% 0x0000000801dcb11c
7 0.5% 99.6% 7 0.5% 0x0000000801dcb11e
4 0.3% 99.9% 4 0.3% program::threadWorker
1 0.1% 99.9% 1 0.1% 0x0000000801dcb110
1 0.1% 100.0% 1 0.1% 0x00007fffffffffc0
Однако только 1 из 5 процессов, показанных здесь, является фактическим именем функции; Остальные адреса. Как я могу узнать, к чему относятся эти адреса? (Конечно, меня больше всего интересует первый адрес, показанный выше)
Изменить: Вот как я запустил профилировщик:
env CPUPROFILE=prof.out ./a.out
[kill program]
pprof ./a.out prof.out
Кроме того, я нашел причину путем проверки кода. Но все равно было бы неплохо, чтобы профилировщик точно определил виновную функцию, а не адрес.
1 ответ
Возможно ли, что вы не указали исполняемый файл при загрузке результатов в google-pprof?
Я запускаю это как:
$ google-pprof executable /tmp/executable.hprof --text | less
и может видеть имена функций просто отлично. Или, что эти методы находятся в какой-то общей библиотеке, которая не находится на вашем пути, когда вы запускаете google-pprof?