Ответ 1
Убедитесь, что вы скомпилировали код с опцией -fno-omit-frame-pointer
gcc.
Я запускаю "perf" следующим образом:
perf record -a --call-graph -p some_pid
perf report --call-graph --stdio
Затем я вижу следующее:
1.60% my_binary my_binary [.] my_func
|
--- my_func
|
|--71.10%-- (nil)
| (nil)
|
--28.90%-- 0x17f310000000a
Я не вижу, какие функции вызывают my_func(). Вместо этого я вижу "ноль" и "0x17f310000000a". Я делаю что-то неправильно? Вероятно, это не проблема с отладочной информацией, потому что некоторые символы отображаются, а другие не отображаются.
Дополнительная информация:
Убедитесь, что вы скомпилировали код с опцией -fno-omit-frame-pointer
gcc.
Вы почти там, вам не хватает опции -G
(вам может понадобиться более свежий перфоманс, чем тот, который установлен в вашей системе):
$ perf report --call-graph --stdio -G
От perf help report
:
-G, --inverted
alias for inverted caller based call graph.
Вы пробовали профилировать с Zoom? Он может использовать perf, custom driver или oprofile для сбора образцов. Если вам просто интересно посмотреть на один процесс, попробуйте настроить "Время потока".
Мне было бы интересно узнать, являются ли какие-либо опции масштабирования лучшими/разными при получении информации о функции, чем автономный перформанс.