Проблема в функции 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;
}
}
Мне нужна трассировка стека печати для основного потока издругая тема.