有许多静态和动态测试工具。煤烟是Java字节码静态仪器仪表工具。销和Valgrind的是二进制动态仪器工具。

什么是利弊静态和动态测试工具?我认为,静态检测工具在运行时性能方面更好,而动态工具更加强大。请的能力和性能方面进行比较。

另外,从写LLVM通过使用检测工具的区别是什么?

有帮助吗?

解决方案

我假设需要的是发现的代码,需要显著时间和您可以优化保存那段时间。即仅从定时例行程序不同的目标。

我怀疑静态分析的,因为一切都取决于输入数据的组合。

动态仪器试图测量的功能性质,例如:自时间和总时间,绝对的,平均,和百分比。也调用计数和每个例程的调用图的作用。

动态仪器(一拉 gprof的 )具有已有几十年的事实上的标准,但它是被硬道理很远。一方面,它认识到,大多数的统计它给你缺少点在你原来需要来讲是非常重要的。

这天(恕我直言),你需要一个采样分析器,样本调用堆栈,而不仅仅是程序计数器。它应该对采样挂钟时间,而不仅仅是CPU时间。样品不需要在高频绘制。当应用程序正在等待用户输入应该抑制采样。它应该给你在该行或指令级的信息,而不仅仅是功能水平。它应该给您的代码行中最重要的统计信息是包含它的样品的百分比,因为那是,如果该行被优化可以保存的时间的最直接的量度。

一个少数分析器可以做到这一点,OProfile的和RotateRight /缩放尤其如此。

其他提示

静态仪器的优点是,所述分析是不依赖于输入。分析发生在原代码和包括代码的所有路径。完全覆盖。这种类型的仪器通常重写二进制文件,准备执行而不在运行时需要另一个进程。这也意味着,该代码将跑得快,从注入的代码来唯一的开销。静态仪器的缺点是由于缺少运行时信息和因为引起的不详细的分析,有时是很难实现自己的目标。

在另一侧上,动态插不包括在代码的运行时的每一个细节和信息。在大多数情况下,执行动态仪器仪表工具,很容易编写。在另一方面,是不是能够实现全代码覆盖率由于该执行路径依赖于给定的输入。也是事实,即有一个需要外部过程中被附接和仪器原来使事情更慢。

AFAIC,LLVM通行证用于静态仪表,因为生成的代码是在编译时和已经被写入最终二进制和肯定包括静态仪表技术的所有优点和缺点。

要得出结论,这是你所需要的问题。你应该选择适合您的工作的工具。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top