这是一件容易的事。我需要分析Linux C++程序:
必须要求:
gcc (g++)编译的程序x86-64程序。-O3)编译的配置文件程序。(*见脚注)有用的特点:
hot代码)将是很好的功能:
未来的需求(我现在不需要它,但在不久的将来我将需要它):
clang合作(会很好)例如,在Windows上,非常好。
我在Linux上给了gprof一次尝试,但无法使它使用优化启用,即使是使用-g -pg。
(*)调试和分析信息可能需要存在(例如,-p -g -pg)。
发布于 2015-04-24 12:57:02
您至少应该了解随机停顿技术。它并不能满足您所有的需求,但它比任何自动分析器都更有效地找到您所称的“热”代码,我称之为“加速的机会”。
它之所以更有效是因为这一点。
想象一个理想的轮廓仪。假设它获取程序状态的随机时间样本(包括堆栈和内存,用于所有线程)。假设它具有人工智能和自动编程能力,这样它就可以理解程序以及编写程序的人。假设它检查了每个样本,并确定了该时刻被花费的全部原因,并且正在寻找一种方法,通过可能的改变来避免花费时间。如果它看到了加速的机会,并且在样本的分数X上看到了它,它可以建议,如果你做了那个改变,你可以节省到分数X的时间。
这不是个很棒的侧写员吗?它可以找到各种各样的东西,而不仅仅是函数,花费大量的时间,你不能做任何事情。
值得一问的是,它需要采集多少样本?通常的假设是--越多越好--精确度越高。不对!你只是想找出问题,而不是衡量它。如果一个加速机会需要的分数X的时间,它将采取分数X的10,000个样本,它将采取分数X的10个样本(大致)。因此,如果它足够大,值得修理,它不需要太多的样本。事实上,它只要看到一个问题两次就知道它是重要的。平均需要2/X样本,所以如果X为0.3,则需要6.67个样本。(统计上的理由是这里。)
好吧,如果您不介意使用自己的头,手动采集一些样本,比如使用jstack或调试器,那么您已经拥有了理想的分析器。许多程序员都知道这一点,并利用它使他们的代码惊人地快。
发布于 2015-03-11 07:03:37
[医] Allinea地图与列表中的所有内容匹配--它还像处理线程一样处理您的“未来需求”。没有比它更好的东西了--它的开销很低--通常是<5%,而呼喊则远远超过100%。
这是商业性质的--但为了完整的答案,这属于这里。
https://softwarerecs.stackexchange.com/questions/9992
复制相似问题