目前,我正在研究使用MiniDumpWriteDump创建转储文件(进程中,ahem)的问题。这个问题只出现在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中有一个(看似没有文档的?) 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;在谷歌上搜索这个新发现的结构时,我发现一个地方在64位构建中使用它。这是否真的很重要,还是仅仅是一次错误的尝试,试图编写64位安全代码?
发布于 2015-03-18 13:16:30
MINIDUMP_EXCEPTION_INFORMATION64在调用MiniDumpWriteDump()时不起作用,该函数总是需要传递一个MINIDUMP_EXCEPTION_INFORMATION*。
它表示相同的信息,但表示它在转储文件本身中的记录方式。它需要从您传递的信息转换,不能将指针存储在文件中。需要将其扁平化,ULONG64 ExceptionRecord成员在存储MINIDUMP_EXCEPTION记录的文件中指定偏移量。ULONG64 ContextRecord成员指定存储上下文记录的文件中的偏移量。
转储文件格式没有正式记录,只是非正式地从这类声明中获得。他们是准确的,这是我最后一次玩这个(~2年前)。
所以,跟你的问题无关。
https://stackoverflow.com/questions/29119664
复制相似问题