我正在使用Linux perf对C++应用程序进行分析,并使用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和动态转换。但是,似乎其他符号(如malloc但不包括_int_malloc)确实有调用父项。
为什么perf在_int_malloc时不显示调用父级函数?我找不到__do_dyn_cast的最终调用者。有没有办法修改我的设置以获取这些信息?我使用x86-64,所以我想知道是否需要带有帧指针的(非标准)libc6。
例如:
_int_malloc 占用了8%的时间,但没有任何调用者。
__strcmp_sse42和__cxxabiv1::__si_class_type_info::__do_dyncast共占用了约10%的时间,并且有一个名为0的调用者,该调用者有调用者2d6935c、2cc748c和6,这些调用者没有调用者。
因此,仅使用perf就无法找出哪些例程负责所有这些malloc和动态转换。但是,似乎其他符号(如malloc但不包括_int_malloc)确实有调用父项。
为什么perf在_int_malloc时不显示调用父级函数?我找不到__do_dyn_cast的最终调用者。有没有办法修改我的设置以获取这些信息?我使用x86-64,所以我想知道是否需要带有帧指针的(非标准)libc6。