Я профилирую приложение C++, используя linux perf, и получаю хороший граф потока управления, используя GProf2dot. Однако некоторые символы из библиотеки C (libc6-2.13.so) занимают значительную часть общего времени и при этом не имеют внутренних ребер.
Например:
_int_malloc
занимает 8% времени, но не имеет родительских вызовов.__strcmp_sse42
и __cxxabiv1::__si_class_type_info::__do_dyncast
вместе занимают около 10% времени и имеют вызывающий объект с именем 0
, у которого есть вызывающие абоненты 2d6935c
, 2cc748c
и 6
, у которых нет вызывающих абонентов.В результате я не могу выяснить, какие подпрограммы ответственны за все это выделение памяти и динамическое приведение, используя только perf. Однако кажется, что другие символы (например, malloc
, но не _int_malloc
) имеют родительские вызовы.
Почему perf show не вызывает родителей для _int_malloc? Почему я не могу найти конечных пользователей __do_dyn_cast? И есть ли способ изменить мои настройки, чтобы я мог получить эту информацию? Я на x86-64, поэтому мне интересно, нужна ли мне (нестандартная) libc6 с указателями кадров.