Как интерпретировать адреса в Google perf tools CPU profiler - PullRequest
7 голосов
/ 13 октября 2011

Моя программа на 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 Ответ

2 голосов
/ 13 октября 2011

Возможно, вы не указали исполняемый файл при загрузке результатов в google-pprof?

Я запускаю его как:

$ google-pprof executable /tmp/executable.hprof --text | less

и может видеть имена функций просто отлично. Или, что эти методы находятся в какой-то общей библиотеке, которая не указывается при запуске google-pprof?

...