使用 gprof2dot 进行分析时隐藏函数的详细描述

Posted

技术标签:

【中文标题】使用 gprof2dot 进行分析时隐藏函数的详细描述【英文标题】:Hide long description of function while profiling with gprof2dot 【发布时间】:2015-02-10 10:12:15 【问题描述】:

我使用gprof2dot 来分析我的应用程序:

./gprof2dot.py -f callgrind callgrind.out.x | dot -Tsvg -o output.svg

source

尽管它为我提供了漂亮的图形分析,但每个框中的每个函数的名称都很长,并且远远超出了屏幕大小。由于 boost 库对模板的使用率很高。只需查看其中一个函数名称:

std::reference_wrapper<boost::numeric::odeint::controlled_runge_kutta<boost::numeric::odeint::runge_kutta_dopri5, boost::numeric::odeint::default_error_checker<double, boost::numeric::odeint::range_algebra, boost::numeric::odeint::default_operations>, boost::numeric::odeint::initially_resizer, boost::numeric::odeint::explicit_error_stepper_fsal_tag> > std::ref<boost::numeric::odeint::controlled_runge_kutta<boost::numeric::odeint::runge_kutta_dopri5, boost::numeric::odeint::default_error_checker<double, boost::numeric::odeint::range_algebra, boost::numeric::odeint::default_operations>, boost::numeric::odeint::initially_resizer, boost::numeric::odeint::explicit_error_stepper_fsal_tag> >(boost::numeric::odeint::controlled_runge_kutta<boost::numeric::odeint::runge_kutta_dopri5, boost::numeric::odeint::default_error_checker<double, boost::numeric::odeint::range_algebra, boost::numeric::odeint::default_operations>, boost::numeric::odeint::initially_resizer, boost::numeric::odeint::explicit_error_stepper_fsal_tag>&)

有什么方法可以去掉函数的命名空间和模板甚至参数,使其在图中看起来更小?

PS. 图片很大,我无法将其转换为 png。我不知道你是否可以下载并打开这个 10MB 的图像(link)。

【问题讨论】:

我的同情。我打开图片,你是对的,这太疯狂了。更重要的是,大部分箱子都不是你的。如果我需要了解如何加速我的代码,我使用this method。如果您无法分辨代码的哪一部分导致了某个库函数使用了大部分时间,那么就没有必要知道它。 callgrind.out.x 只是一个文本文件,每个函数名只存储一次。您可以使用 awk 或 perl 逐行对其进行预处理。 @Mike Dunlavey,你确定这里存在 XY 问题吗?你的穷人分析器(或者如果你不喜欢这个名字,统计人分析器)应该营销 这里? (barej 已经在他的问题中链接到同一个线程!!)您是否监控标记为 profiler 的每个问题? @osgx:营销?我试图通过指出一个非常普遍的误解来帮助人们使他们的代码尽可能快地运行。 CPU 制造商用他们能想到的每一个技巧来让自己的芯片比竞争对手更快。软件人会尝试做同样的事情吗?对于那些真正关心的人,我试图提高人们对旧但未被充分认识的技术的认识是一种从软件中减少周期的方法。使用分析器获得的是漂亮的壁纸,而加速却未被发现。 【参考方案1】:

./gprof2dot.py 有两个相关的选项:

-s, --strip           strip function parameters, template parameters, and
                      const modifiers from demangled C++ function names
-w, --wrap            wrap function names

我个人更喜欢 -w,因为我仍然可以区分模板。

【讨论】:

以上是关于使用 gprof2dot 进行分析时隐藏函数的详细描述的主要内容,如果未能解决你的问题,请参考以下文章

利用callgrind+gprof2dot+dot进行性能分析

关于gprof和gprof2dot生成的图的一些疑惑

如何省略 cProfile 中的方法

C#-C# Dispose模式详细分析

C/C++性能分析工具gprof

求C语言隐藏光标函数的详细解释