gpt4 book ai didi

c++ - 当我将异常信息添加到我的小型转储时,堆栈信息消失了

转载 作者:可可西里 更新时间:2023-11-01 10:35:14 29 4
gpt4 key购买 nike

我正在为子进程编写进程外小型转储。这是相关的代码片段:

CONTEXT thread_context{};
thread_context.ContextFlags = CONTEXT_FULL;
assert(GetThreadContext(child_thread_handle, &thread_context));

EXCEPTION_POINTERS exception_ptrs;
exception_ptrs.ExceptionRecord = &exception_info.ExceptionRecord;
exception_ptrs.ContextRecord = &thread_context;

MINIDUMP_EXCEPTION_INFORMATION minidump_exception_info;
minidump_exception_info.ThreadId = evt.dwThreadId;
minidump_exception_info.ExceptionPointers = &exception_ptrs;
minidump_exception_info.ClientPointers = FALSE;
auto success = MiniDumpWriteDump(child_handle, evt.dwProcessId, file_handle, minidump_flags, &minidump_exception_info, nullptr, nullptr);

这为我提供了异常信息,以及引发异常的线程 之外的每个线程的调用堆栈。如果我将 &minidump_exception_info 更改为 nullptr,我将获得调用堆栈但没有异常信息。有没有办法同时获取异常信息和调用堆栈?

最佳答案

使用 CONTEXT_FULL 调用 GetThreadContext 不会捕获获取堆栈跟踪所需的所有寄存器,并且上下文的存在会阻止调试器使用其他信息来获取调用堆栈。改为使用 CONTEXT_ALL 获取足够的信息来重新创建调用堆栈。

https://msdn.microsoft.com/en-us/magazine/hh580738.aspx是解决这个问题的有用引用。

关于c++ - 当我将异常信息添加到我的小型转储时,堆栈信息消失了,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31120157/

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