使用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次。但在代码中,所有变量的引用不超过两次。如何获取实际的内存访问跟踪。请任何人帮助我,请真的很感激。
答案 0 :(得分:0)
堆栈上的内存地址被多次使用并不奇怪。 请考虑以下代码:
int main() {
{
int a = 0;
}
{
int b = 0;
}
}
如果分配不被优化,我几乎可以保证两个分配将被用于相同的内存地址。
现在考虑一下这样一个事实,即在代码执行之前和之后,还有相当多的运行时初始化,并且应该清楚为什么你所看到的是完全预期的。
您可以使用InstLibExamples / filter.cpp中提供的示例来了解如何过滤掉某些IMG的内存跟踪。