1

我只是在使用英特尔的 pin 工具时遇到了问题。我想要一个 c++ 程序的内存访问跟踪,并为此使用它。首先,我使用运行 c++ 程序(./a.out)

../../../pin -t obj-intel64/pinatrace.so -- ./a.out

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

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

4

1 回答 1

0

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

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

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

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

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

于 2015-11-10T11:07:08.973 回答