Как интерпретировать адреса в 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?

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