收集动态指令执行计数的最简单方法?
Easiest way to collect dynamic Instruction execution counts?
我想要一种简单快速的方法来收集 LLVM 位码中每个 Instruction 在应用程序的给定 运行 中执行的次数。据我所知,我可以采取多种方法:
使用PIN。这将需要使用 DWARF 调试信息和指令调试信息来尝试将二进制中的指令映射到位码中的指令;不能 100% 确定这会有多准确。
使用 llvm-prof。这里有两个问题。首先,我在 Stack Overflow 上看到了 opt
的选项 --insert-edge-profiling
。但是,该选项似乎在 3.6 中不可用?其次,这种分析似乎只记录了函数级别的执行次数,而不是单个指令级别的执行次数。对吗?
编写一个类似于 AddressSanitizer 的新工具。这可能有用,但似乎有点矫枉过正。
是否有更简单的方法来实现我所缺少的目标?
我想要一种简单快速的方法来收集 LLVM 位码中每个 Instruction 在应用程序的给定 运行 中执行的次数。据我所知,我可以采取多种方法:
使用PIN。这将需要使用 DWARF 调试信息和指令调试信息来尝试将二进制中的指令映射到位码中的指令;不能 100% 确定这会有多准确。
使用 llvm-prof。这里有两个问题。首先,我在 Stack Overflow 上看到了
opt
的选项--insert-edge-profiling
。但是,该选项似乎在 3.6 中不可用?其次,这种分析似乎只记录了函数级别的执行次数,而不是单个指令级别的执行次数。对吗?编写一个类似于 AddressSanitizer 的新工具。这可能有用,但似乎有点矫枉过正。
是否有更简单的方法来实现我所缺少的目标?