使用Valgrind获取指令配置文件

时间:2015-12-15 01:02:38

标签: profiling valgrind instrumentation

是否可以使用valgrind获取有关程序运行的指令配置文件的信息。通过指令简档,我指的是分解为每种类型指令的指令数。例如:'n1'MOV,'n2'CALL等。如果没有,还有哪些其他工具可以做到?

1 个答案:

答案 0 :(得分:2)

我认为,valgrind没有现成的工具来完成这项任务。您可以尝试编写一些脚本来获取此类信息,或者通过GUI手动获取基本数据。

valgrind中有callgrind工具来分析程序执行:

valgrind --tool=callgrind [callgrind-options] ./your-program

(检查http://valgrind.org/docs/manual/cl-manual.html

有了它,您可以获得每个指令执行计数(Ir事件)的精确数据和执行指令总数的配置文件,但是没有关于n1 MOV,n2 CALL等的汇总信息

使用--dump-instr=yes callgrind选项,将有每个机器指令的执行计数的确切数据;可以使用kcachegrind GUI在"汇编程序"中查看此数据。标签。不确定callgrind_annotate是否将解析此类文件并显示带注释的反汇编,但可以通过某些perl / python脚本解析call {callgrind.out.$pid的输出(此文件是基于文本的 - {{3} } - 根据" 3.1.6。子位置压缩")将有十六进制地址和偏移量。您将获得每个地址的机器指令和执行计数的地址,因此脚本可以将计数与反汇编结合起来。

(其他方法是切换到一些不精确的探查器,如perfoprofile,以获得与文本相同的带注释的反汇编,并通过自定义脚本对其进行解析。结果与valgrind不完全相同,但是使用文本形式的命令更容易获得计数)

PS:我认为编写脚本比攻击valgrind的插件(callgrind)更容易,为每种指令类型添加了几个计数器。这仍然是可能的,但是比普通的callgrind更加困难并且会使仪表程序的速度降低几倍。

相关问题