Debugging 为什么Intel Pin无法识别某些已执行指令的映像/例程?

Debugging 为什么Intel Pin无法识别某些已执行指令的映像/例程?,debugging,ld,intel-pin,Debugging,Ld,Intel Pin,我正在创建一个大型pintool,我有两个问题: 该工具(以下仅对相关部分进行了删节)有时无法识别特定执行指令的映像/例程。有人知道什么时候/为什么会这样吗 该工具(在检测Barnes Hut基准测试时)在运行一段时间后总是以内存不足(OOM)错误终止(尽管基准测试在独立运行时成功完成)。使用哪些工具调试/跟踪Pin检测应用程序的OOM错误 int main(int argc, char *argv[]) { PIN_InitSymbols(); if( PIN_Init(a

我正在创建一个大型pintool,我有两个问题:


该工具(以下仅对相关部分进行了删节)有时无法识别特定执行指令的映像/例程。有人知道什么时候/为什么会这样吗


该工具(在检测Barnes Hut基准测试时)在运行一段时间后总是以内存不足(OOM)错误终止(尽管基准测试在独立运行时成功完成)。使用哪些工具调试/跟踪Pin检测应用程序的OOM错误

int main(int argc, char *argv[])
{
    PIN_InitSymbols();
    if( PIN_Init(argc, argv) )
    {
    return 0;
    }

    INS_AddInstrumentFunction(Instruction, 0);

    PIN_StartProgram();

    return 0;
}

VOID Instruction(INS ins, VOID *v)
{
    INS_InsertPredicatedCall( ins,
    IPOINT_BEFORE, 
    (AFUNPTR) handle_ins_execution,
    IARG_INST_PTR,
    .....);
}


VOID handle_ins_execution (ADDRINT   addr, ...)
{
    PIN_LockClient();
    IMG img = IMG_FindByAddress(addr);
    RTN rtn = RTN_FindByAddress(addr);
    PIN_UnlockClient();
    if( IMG_Valid(img) ) {
    std::cerr << "From Image  : " << IMG_Name( img ) << std::endl;
    } else {
    std::cerr << "From Image  : " << "(UKNOWN)" << std::endl;
    }
    if( RTN_Valid(rtn) ) {
    std::cerr << "From Routine  : " << RTN_Name(rtn) << std::endl;
    } else {
    std::cerr << "From Routine  : " << "(UKNOWN)" << std::endl;
    }
}
intmain(intargc,char*argv[])
{
PIN_InitSymbols();
if(PIN_Init(argc,argv))
{
返回0;
}
INS_AddInstrumentFunction(指令,0);
PIN_StartProgram();
返回0;
}
无效指令(INS INS,VOID*v)
{
INS_InsertPredicatedCall(INS,
我以前,
(AFUNPTR)处理执行,
IARG_INST_PTR,
.....);
}
无效句柄\u插入\u执行(ADDRINT addr,…)
{
PIN_LockClient();
IMG IMG=IMG_FindByAddress(addr);
RTN RTN=RTN_FindByAddress(addr);
PIN_解锁客户端();
如果(IMG_有效(IMG)){

std::cerr我最近在PinHeads论坛上问了这个问题,我正在等待答复。我在文档中读到的是,IMG_FindByAddress函数通过查找“对于每个图像,检查地址是否在其某个段的映射内存区域内”来运行执行的指令可能不在有效范围内

了解它在这种情况下的图像的最好方法是查看上下文。我的pintool(基于DebugTrace)即使不知道它在什么图像中也会继续运行。您可以查看发生这种情况前后的日志条目。我一直在OSX上的dydl中看到这一点