C++ 回放时不执行带PinPlay RTN\u InsertCall回调的英特尔Pin

C++ 回放时不执行带PinPlay RTN\u InsertCall回调的英特尔Pin,c++,intel,intel-pin,C++,Intel,Intel Pin,我在Pinplay replay框架中使用Intel的Pin API,在执行replay时执行以下操作时遇到问题: VOID Arg1Before(char *name, ADDRINT arg1) { tracefile << name << "(" << arg1 << ")" << endl; } VOID Routine(RTN rtn, VOID *v) { RTN_Open(rtn); if (RTN_Name

我在Pinplay replay框架中使用Intel的Pin API,在执行replay时执行以下操作时遇到问题:

VOID Arg1Before(char *name, ADDRINT arg1) {
  tracefile << name << "(" << arg1 << ")" << endl;
}

VOID Routine(RTN rtn, VOID *v) {
  RTN_Open(rtn);
  if (RTN_Name(rtn) == "malloc") {
    RTN_InsertCall(rtn, IPOINT_BEFORE, (AFUNPTR)Arg1Before,
                   IARG_ADDRINT, "malloc",
                   IARG_FUNCARG_ENTRYPOINT_VALUE, 0,
                   IARG_END); 
  }
  RTN_Close(rtn);
}
并使用以下命令进行回放:

$PIN_ROOT/pin -xyzzy -reserve_memory pinball/foo.address \
    -t $PIN_ROOT/extras/pinplay/bin/intel64/pinplay-malloctracer.so \
    -replay -replay:basename pinball/foo \
    -- ../pin-2.14/extras/pinplay/bin/intel64/nullapp
调试表明,
Routine()
被正确调用,但插入的调用从未被执行


我的操作系统是RHEL。

我遇到了同样的问题,得到了答案,如果您使用python脚本来记录程序,您只需要为它提供-log:image\u ops选项。大概是

$pinpoints.py --cfg test.cfg --log_options="-log:image_ops" -l 
另外,请检查您的常规仪表功能。我想应该是这样

RTN_Name(rtn) == "__libc_malloc"

我遇到了同样的问题,得到了答案,如果您使用python脚本来记录程序,您只需要为它提供-log:image_ops选项。大概是

$pinpoints.py --cfg test.cfg --log_options="-log:image_ops" -l 
另外,请检查您的常规仪表功能。我想应该是这样

RTN_Name(rtn) == "__libc_malloc"

你知道映像操作会给重播增加什么,以及为什么在例行的进入和退出时需要它们来触发回调吗?帮助文本只是说它记录了图像的加载和卸载。你知道图像操作在重播中添加了什么,以及为什么在例行的进入和退出时需要它们来触发回调吗?帮助文本只是说它记录图像加载和卸载。