我应该使用(未记录的?)MINIDUMP_EXCEPTION_INFORMATION64结构来创建64位进程的转储吗
Should I use the (undocumented?) MINIDUMP_EXCEPTION_INFORMATION64 structure for creating dumps of 64bit processes?
我目前正在处理使用MiniDumpWriteDump
创建转储文件(进程中,嗯哼)的问题。这个问题只出现在64位版本中。我的代码只是
static LONG WINAPI unhandledExceptionFilter( PEXCEPTION_POINTERS p )
{
// ...
MINIDUMP_EXCEPTION_INFORMATION mei;
mei.ThreadId = ::GetCurrentThreadId();
mei.ExceptionPointers = p;
mei.ClientPointers = TRUE;
if ( !MiniDumpWriteDump( ::GetCurrentProcess(),
::GetCurrentProcessId(),
dumpFile,
MiniDumpNormal,
&mei,
NULL,
NULL ) ) {
// ....
}
偶然间,我注意到Windows SDK中有一个(似乎没有记录?)MINIDUMP_EXCEPTION_INFORMATION64
结构,它与MINIDUMP_EXCEPTION_INFORMATION
结构有很大不同:
typedef struct _MINIDUMP_EXCEPTION_INFORMATION {
DWORD ThreadId;
PEXCEPTION_POINTERS ExceptionPointers;
BOOL ClientPointers;
} MINIDUMP_EXCEPTION_INFORMATION, *PMINIDUMP_EXCEPTION_INFORMATION;
typedef struct _MINIDUMP_EXCEPTION_INFORMATION64 {
DWORD ThreadId;
ULONG64 ExceptionRecord;
ULONG64 ContextRecord;
BOOL ClientPointers;
} MINIDUMP_EXCEPTION_INFORMATION64, *PMINIDUMP_EXCEPTION_INFORMATION64;
在谷歌上搜索这个新发现的结构,我发现了一个inded将其用于64位构建的地方。这真的很重要吗?还是只是编写64位安全代码的错误尝试?
MINIDUMP_EXCEPTION_INFORMATION64在调用MiniDumpWriteDump()时不起任何作用,该函数始终要求您传递一个MINIDUMS_EXCEPTION_INFORMATION*。
它表示相同的信息,但它在转储文件本身中的记录方式。它需要从您传递的信息中转换,不能在文件中存储指针。它需要展开,ULONG64 ExceptionRecord成员指定存储MINIDUMP_EXCEPTION记录的文件中的偏移量。ULONG64 ContextRecord成员指定存储上下文记录的文件中的偏移量。
转储文件格式没有正式记录,只是从这些声明中非正式地记录下来。他们是准确的,我上次玩这个(大约2年前)。
所以,与你的问题无关。
相关文章:
- 如何循环打印顶点结构
- 通过方法访问结构
- 使用不带参数的函数访问结构元素
- 预处理器:插入结构名称中的前一个行号
- 为什么在没有显式默认构造函数的情况下,将另一个结构封装在联合中作为成员的结构不能编译
- 孤立代码块在结构中引发异常
- 有什么方法可以遍历结构吗
- 如何在 C# 中映射双 C 结构指针?
- 如何在C++中使用结构生成映射
- 无法将结构注册为增强几何体3D点
- 多成员Constexpr结构初始化
- C++将文本文件中的数据读取到结构数组中
- 如何重构类层次结构以避免菱形问题
- 如何在C++中序列化结构数据
- std::vector的包装器,使数组的结构看起来像结构的数组
- 没有为自己的结构调用列表推回方法
- 奇怪的结构&GCC&clang(void*返回类型)
- 在 c++ 中拥有一组结构的正确方法是什么?
- vscode g++链路故障:体系结构x86_64的未定义符号
- C++概念:如何使用'concept'检查模板化结构的属性?