收集动态指令执行计数的最简单方法是什么?

时间:2015-05-28 13:24:07

标签: profiling llvm dynamic-analysis

我想要一种简单快捷的方法来收集LLVM bitcode中每个Instruction在给定的应用程序运行中执行的次数。据我所知,我可以采取多种方法:

  • 使用PIN。这将需要使用DWARF调试信息和指令调试信息来尝试将二进制中的指令映射到bitcode中的指令;不是100%确定这将是多么准确。

  • 使用llvm-prof。这里有两个问题。首先,我在Stack Overflow上看到opt选项--insert-edge-profiling。但是,这个选项似乎在3.6中没有?其次,似乎这种分析仅记录功能级别的执行计数,而不是单个指令级别的执行计数。这是对的吗?

  • 编写一个类似于AddressSanitizer的新工具。这可能有用,但看起来有点矫枉过正。

有没有更简单的方法来实现我失去的目标?

1 个答案:

答案 0 :(得分:1)

作为博士研究的一部分,我编写了一个tool来收集程序执行的基本块的跟踪。此工具还记录每个基本块中LLVM指令的数量,因此对跟踪的分析将提供动态指令执行计数。

另一个研究工具是Harmony。它将提供程序中每个基本块的动态执行计数,您可以使用静态指令计数进行扩展。

否则,我建议您编写自己的工具。对于每个基本块,(原子地)通过该块中的指令数递增全局计数器。