我想获得测试程序中内存读写指令的百分比,最好是动态获取。除了计算gdb asm转储中的指令(这仍然是静态的)之外,还有没有更简单的方法来获取它? Valgrind提供总堆使用量。 Perf具有一些不错的功能,但确实支持WSL。 Pin具有指令计数功能,但是我不确定它是否支持WSL。
您是否有[[tried]] PIN,或基于PIN构建的SDE,您想要什么?https://software.intel.com/en-us/articles/intel-software-development-emulator PIN基于动态运行时检测,而不是性能计数器。 如果GDB在WSL下工作,那么PIN也应该如此。sde64 -mix -- ./my-program
会告诉您PIN码是否有效,并且可以完全解决您的问题。 SDE的指令混合使用助记符IIRC,也许不是通过内存目标与src,但是至少您会知道在任何时间编写自定义PIN工具之前PIN都会起作用。lzcnt
的CPU上模拟rep bsr
,诸如此类。 因此,我怀疑PIN除了JIT的能力之外还需要更多的内核支持(Java和Web浏览器JS引擎需要的东西,而且只是mmap(PROT_EXEC)
)。它可能使用ptrace,但是
相关:How do I determine the number of x86 machine instructions executed in a C program?不是特定于WSL的,但是提到了sde64 -mix
。