我正在使用 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 的所有这些 mallocing 和动态转换的例程。但是,似乎其他符号(例如malloc
但不是_int_malloc
)确实有呼叫父母。
为什么 perf show 不为 _int_malloc 调用父母?为什么我找不到 __do_dyn_cast 的最终调用者?而且,有什么方法可以让我修改我的设置,以便我可以获得这些信息吗?我在 x86-64 上,所以我想知道是否需要带有帧指针的(非标准)libc6。