C ++ получить трассировку стека для указанного потока - PullRequest
0 голосов
/ 08 ноября 2019

Проблема в функции 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;
        }
    }

Мне нужна трассировка стека печати для основного потока издругая тема.

...