将异常信息添加到小型转储时,堆栈信息将消失
Stack information disappears when I add exception information to my minidump
我正在为一个子进程编写一个进程外小型转储。以下是相关的代码片段:
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是一个很有帮助的参考。
相关文章:
- 正在查找文档以获得PS4平台的C++中的设备信息
- 为什么在运行时没有向我们提供有关分段错误的更多信息?
- 奇怪的(对我来说)返回声明 - 在谷歌上找不到任何关于它的信息
- 将地址分配给本地指针后,公共对象的变量将消失
- 如何设置一个范围来提取我想要获得的信息
- 系统参数信息A 与 SPI_GETMOUSE 返回 0
- 为什么 gcovr 会生成空覆盖率统计信息?
- 我已经阅读了很多关于 2d 数组的信息,但我在作业中使用它时遇到了麻烦
- 应用投影矩阵后对象消失
- 添加自定义析构函数时,Move 构造函数在派生类中消失
- 将信息输入到下面显示的结构向量中的正确语法/格式是什么
- 调试符号中缺少 QObject 类信息(编辑但存在其他 Qt 类)
- 为什么数组大小信息可用于"sizeof"运算符和 delete[] 运算符,但在将数组作为参数传递到
- Pisarze - 来自波兰奥林匹克信息学的数据分析任务
- 将数组信息存储到 c++ 向量中有一个"Access violation reading location"
- C++20 个模块在 clang (Windows):在最简单的示例中键入信息错误
- C++ 如何暂停控制台输出,以便用户可以在继续之前阅读信息
- 如何从WebAssembly模块检测浏览器信息?
- Visual Studio 2017 C++,不能使用 typeid() 获取信息对象,缺少指针?;
- 将异常信息添加到小型转储时,堆栈信息将消失