C++ C++;获取指定线程的堆栈跟踪
问题出现在StackWalk64函数中,该函数不适用于其他线程,仅适用于当前线程 例如:C++ C++;获取指定线程的堆栈跟踪,c++,windows,stack-trace,C++,Windows,Stack Trace,问题出现在StackWalk64函数中,该函数不适用于其他线程,仅适用于当前线程 例如: symminitialize(进程,symbolPath.c_str(),TRUE); 位移=0; DWORD dwMachineType=图像\文件\机器\ AMD64; stack.AddrPC.Offset=context.Rip; stack.AddrPC.Mode=AddrModeFlat; stack.AddrFrame.Offset=context.Rsp; stack.AddrFrame.
symminitialize(进程,symbolPath.c_str(),TRUE);
位移=0;
DWORD dwMachineType=图像\文件\机器\ 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;
对于(帧=0;帧++)
{
结果=StackWalk64
(
dwMachineType,
过程
主线,
&堆叠,
&背景,
无效的
SymFunctionTableAccess64,
SymGetModuleBase64,
无效的
);
symbol.SizeOfStruct=sizeof(图像HLP_SYMBOL64);
symbol.MaxNameLength=255;
SymGetSymFromAddr64(进程,(ULONG64)stack.AddrPC.Offset、位移和符号);
UnDecorateSymbolName(symbol.Name,(PSTR)Name,256,UNDNAME_COMPLETE);
LogDebug我们看不到上下文
来自何处。可能不是来自主线程。上下文与此代码的功能相同。我在启动第二个线程时存储上下文,但上下文仍然包含相等的堆栈跟踪。我需要从看门狗线程打印主堆栈跟踪。
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;
}
}