本文将详细的介绍MiniDumpCallback函数使用。使用该函数可以让MiniDumpWriteDump
1) 忽略某一可执行模块的信息(全部或部分);
2)忽略某一线程的信息(全部或部分);
3)将用户指定的内存空间的内容写入生成的DMP文件中。
1. MiniDumpCallback的声明如下:

CallbackParam是用户为MiniDumpCallback自定义的参数。
CallbackInput:包含了MiniDumpWriteDump传给MiniDumpCallback的数据。该数据由结构体MINIDUMP_CALLBACK_INPUT定义:
MiniDumpCallback根据CallbackType将MINIDUMP_CALLBACK_INPUT中的union解析成不同的结构体以从中获取需要的数据(下面会详述).
CallbackOutput:MiniDumpCallback传给MiniDumpWriteDump的数据(通常指定是否将某一特定的信息写入生成的DMP文件中)。该数据由结构体MINIDUMP_CALLBACK_OUTPUT定义:

2. 为了说明MiniDumpCallback的使用方法,首先要介绍一下定义MINIDUMP_CALLBACK_INPUT中CallbackType成员的结构体:

下面详细的说明其中几种主要回调类型的作用:
1)IncludeModiuleCallback
使用该类型,MiniDumpWriteDump询问MiniDumpCallback是否将一特定的模块信息包含在生成的DMP文件中。
MINIDUMP_CALLBACK_INPUT的union由结构体MINIDUMP_INCLUDE_MODULE_CALLBACK解析,其中包含了某一模块的信息,定义如下:

详见: http://msdn.microsoft.com/en-us/library/windows/desktop/ms680380(v=vs.85).aspx
如果MiniDumpCallback返回TRUE,相应模块的信息将被包含在生成的DMP文件中;
如果MiniDumpCallback返回FALSE,相应模块的信息将被忽略。
MINIDUMP_CALLBACK_OUTPUT参数在该回调类型中没有被使用。
2)ModuleCallback
使用该类型,MiniDumpWriteDump询问MiniDumpCallback将模块的那些信息包含在生成的DMP文件中。
MINIDUMP_CALLBACK_INPUT的union由结构体MINIDUMP_MODULE_CALLBACK解析,定义如下:

MINIDUMP_CALLBACK_OUTPUT的union由枚举MODULE_WRITE_FLAGS定义

详见:http://msdn.microsoft.com/en-us/library/windows/desktop/ms680534(v=vs.85).aspx
当MiniDumpWriteDump以IncludeModule回调MiniDumpCallback时,将设置一个标志值指示MiniDumpCallback那些类型的信息将被包含在生成的DMP文件中;MiniDumpCallback通过分析这些标志值并清空其中一些或者全部来通知MiniDumpWriteDump忽略掉特定的信息。
尤其要注意的是:ModuleCallback只能通过清空标志值的方式来让MiniDumpWriteDump忽略模块的一些信息而不能指示MiniDumpWriteDump增加新的信息。
3)IncludeThreadCallback
功能与IncludeModuleCallback类似。
MINIDUMP_CALLBACK_INPUT的union由结构体MINIDUMP_INCLUDE_THREAD_CALLBACK来解析,定义如下:

4)ThreadCallback
功能与ModuleCallback类似。
MINIDUMP_CALLBACK_INPUT由结构体MINIDUMP_THREAD_CALLBACK解析,定义如下:

MINIDUMP_CALLBACK_OUTPUT由枚举THREAD_WRITE_FLAGS解析,定义如下:

详见:http://msdn.microsoft.com/en-us/library/windows/desktop/ms681396(v=vs.85).aspx
5)MemoryCallback
使用该类型,在MiniDumpCallback中指定一段内存区域让MiniDumpWriteDump将该区域的内容写入到生成的DMP文件中。
3. 作为一个总结,附上笔者实现的一个简单的DMP生成函数CreateMiniDump.使用该函数能在程序发生异常的时候生成类型为MiniDumpNormal类型的DMP文件。
下载地址:http://download.youkuaiyun.com/detail/kecise/4506403
2099



被折叠的 条评论
为什么被折叠?



