问题在函数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;
}
}
我需要其他线程的主线程打印堆栈跟踪。