C ++获取指定线程的堆栈跟踪

问题在函数StackWalk64中,该函数不适用于其他线程,仅适用于当前线程。

从示例: https://www.gamedev.net/forums/topic/478943-stackwalk64-and-x86/

    SymInitialize(process,symbolPath.c_str(),TRUE);

    displacement = 0;
    DWORD dwMachineType = IMAGE_FILE_MACHINE_AMD64;
    stack.AddrPC.Offset = context.Rip;
    stack.AddrPC.Mode = AddrModeflat;
    stack.AddrFrame.Offset = context.Rsp;
    stack.AddrFrame.Mode = AddrModeflat;
    stack.AddrStack.Offset = context.Rsp;
    stack.AddrStack.Mode = AddrModeflat;

    for (frame = 0; ; frame++)
    {
        result = StackWalk64
        (
            dwMachineType,process,mainThread,&stack,&context,NULL,SymFunctionTableaccess64,SymGetModuleBase64,NULL
        );

        symbol.SizeOfStruct = sizeof(IMAGEHLP_SYMBOL64);
        symbol.MaxNameLength = 255;


        SymGetSymFromAddr64(process,(ULONG64)stack.AddrPC.Offset,&displacement,&symbol);
        UnDecorateSymbolName(symbol.Name,(PSTR)name,256,UNDNAME_COMPLETE);


        LogDebug << frame << " | " << String(symbol.Name);

        if (!result)
        {
            break;
        }
    }

我需要其他线程的主线程打印堆栈跟踪。

nothingzz 回答:C ++获取指定线程的堆栈跟踪

暂时没有好的解决方案,如果你有好的解决方案,请发邮件至:iooj@foxmail.com
本文链接:https://www.f2er.com/3136998.html

大家都在问