1

インテルのピン ツールの使用中に問題が発生しました。C++ プログラムのメモリ アクセス トレースが必要で、そのために使用しています。まず、C++ プログラム (./a.out) を実行します。

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

今、c ++で、各変数のアドレスも出力しました。ピンによって生成されたファイル内のすべてのアドレスを、ファイルによって出力された実際の変数名に置き換えると、間違った順序になります。

たとえば、変数 'a' と 'b' が加算され、結果が 'c' に格納され、コンソールに出力される合計プログラム (わずか 5 行のコード) の場合、ピン 'b' によって生成されたファイルには 150 回存在します。 'a' は 33 回存在し、'c' は 3 回存在します。ただし、コードでは、すべての変数が 2 回以上参照されません。実際のメモリ アクセス トレースを取得するにはどうすればよいですか。誰でも私を助けてください。本当に感謝します。

4

1 に答える 1

0

スタック上のメモリ アドレスが数回使用されることはまったく驚くべきことではありません。次のコードを検討してください。

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

割り当てが最適化されなくても、2 つの割り当てが同じメモリ アドレスに対して行われることはほぼ保証できます。

ここで、コードを実行する前と、場合によっては実行後にかなりの数の実行時の初期化が行われるという事実を考えてみてください。表示されているものが完全に予期されている理由は明らかです。

InstLibExamples/filter.cpp で提供されている例を使用して、特定の IMG のメモリ トレースを除外する方法を確認できます。

于 2015-11-10T11:07:08.973 に答える