gpt4 book ai didi

c++ - 为什么 StackWalk64 总是返回 true?

转载 作者:行者123 更新时间:2023-11-28 08:33:59 27 4
gpt4 key购买 nike

我试图让我的程序转储并在崩溃时保存它的堆栈跟踪。我用 _set_se_translator 安装了我自己的 win32 SE 处理程序,并尝试用 StackWalk64 转储堆栈跟踪,最后抛出一个 C++ 异常(它实际上在捕获时进行日志记录)。

代码如下所示:

...
_set_se_handlers(WIN32EXCEPTION::Win32ExceptionStuff);
...

void WIN32EXCEPTION::Win32ExceptionStuff(unsigned int Code, struct _EXCEPTION_POINTERS* Info) // static
{
STACKFRAME64 sf64;
sf64.AddrPC.Offset = Info->ContextRecord->Eip;
sf64.AddrStack.Offset = Info->ContextRecord->Esp;
sf64.AddrFrame.Offset = Info->ContextRecord->Ebp;
sf64.AddrPC.Mode= sf64.AddrStack.Mode= sf64.AddrFrame.Mode= AddrModeFlat;
while (StackWalk64(IMAGE_FILE_MACHINE_I386,GetCurrentProcess(),GetCurrentThread(),
&sf64,Info->ContextRecord,0,SymFunctionTableAccess64,SymGetModuleBase64,0))
{
//... Do something with the stack frames
}
throw WIN32EXCEPTION(/*...*/);
}

正如我在一些示例中看到的那样,但存在一个问题:StackWalk64 始终返回 true 并且 while 循环变得无限。 StackWalk64 仅重复同一帧。

问题是什么,如何解决?

最佳答案

这看起来与我得到的代码非常相似,而且确实有效。我能看到的唯一区别是我的代码使用 ZeroMemory() 在填充它的任何部分之前清除 STACKFRAME64 结构 - 这可能是必需的。

关于c++ - 为什么 StackWalk64 总是返回 true?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/545329/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com