使用pin工具进行内存访问跟踪

时间:2015-11-09 19:47:17

标签: profiling intel-pin

使用intel的pin工具时我遇到了一个问题。我想要一个c ++程序的内存访问跟踪,并为此使用它。首先,我使用

运行c ++程序(./a.out)
../../../pin -t obj-intel64/pinatrace.so -- ./a.out

现在在c ++中我还打印了每个变量的地址。现在,当我用引脚生成的文件中的所有地址替换文件输出的实际变量名时,它给出了错误的序列。

例如,对于一个sum程序,其中添加了变量'a'和'b',结果存储在'c'中并打印在控制台上(只是一个小的5行代码),在'b'引脚生成的文件中存在150次,'a'存在33次,'c'存在3次。但在代码中,所有变量的引用不超过两次。如何获取实际的内存访问跟踪。请任何人帮助我,请真的很感激。

1 个答案:

答案 0 :(得分:0)

堆栈上的内存地址被多次使用并不奇怪。 请考虑以下代码:

int main() {
  {
    int a = 0;
  }
  {
    int b = 0;
  }
}

如果分配不被优化,我几乎可以保证两个分配将被用于相同的内存地址。

现在考虑一下这样一个事实,即在代码执行之前和之后,还有相当多的运行时初始化,并且应该清楚为什么你所看到的是完全预期的。

您可以使用InstLibExamples / filter.cpp中提供的示例来了解如何过滤掉某些IMG的内存跟踪。