使用WinDbg —— .NET篇 (十三)

8.3 C#创建Mini dump

8.3.1 概述DbgHelp

Microsoft提供了DbgHelp库,它包含了一系列关于辅助调试PE格式的API。其相关的dllDbgHelp.dll,这个文件包含在了操作系统里面,但是早期的操作系统里面(我映像中是在Win7版本之前)这个Dll文件是不可用的。所以如果你的客户还有一些Win XP用户或早期版本的Windows OS用户的话,如果需要使用该类库,还需要把最新的DbgHelp.dll包含在你的程序包里面。其中每个DbgHelp不同的版本,所支持的API也是不一样的,具体的信息可以参见dbghelp.chm文档,这个文档你不需要额外从网上下载,因为在你安装Debugging tools的时候,这个文档就包含在了Windbg.exe的同目录下。

8.3.2 MiniDumpWriteDump函数

在本节中,着重介绍利用DbgHelp库中的MiniDumpWriteDump函数,其定义如下:

BOOL WINAPI MiniDumpWriteDump(
  __in          HANDLE hProcess,
  __in          DWORD ProcessId,
  __in          HANDLE hFile,
  __in          MINIDUMP_TYPE DumpType,
  __in          PMINIDUMP_EXCEPTION_INFORMATION ExceptionParam,
  __in          PMINIDUMP_USER_STREAM_INFORMATION UserStreamParam,
  __in          PMINIDUMP_CALLBACK_INFORMATION CallbackParam
);

在这里大致解释一下每个参数的意思:

hProcess:需要创建Mini dump的进程(目标进程)句柄

ProcessId:目标进程ID

hFile:需要创建的dump文件句柄。

DumpType:需要创建的MiniDump类型,这是一个枚举类型,可以传递一个或多个值的组合。具体参数结构参考dbghelp文档或者下文中对应的C#结构。

ExceptionParam:引起创建Dump行为的Exception指针,可以传null。具体数据结构参考dbghelp文档。

UserStreamParam:包含在MiniDump自定义的一些信息的指针,可以传null。具体数据结构参考dbghelp文档。

CallbackParam:创建Dump的时候会有一些额外的信息生成,可以通过这个参数传递一个回调函数的指针。具体数据结构参考dbghelp文档。

在这里需要注意的是DumpTypeExceptionParam参数:

1.首先说DumpType,这是必须在C#中必须声明的结构,在这里贴出它对应的C#定义:

[Flags]

publicenumMiniDumpType :uint

{

   // From dbghelp.chm: MINIDUMP_TYPE Enumeration

    MiniDumpNormal = 0x00000000,

    MiniDumpWithDataSegs = 0x00000001,

    MiniDumpWithFullMemory = 0x00000002,

    MiniDumpWithHandleData = 0x00000004,

    MiniDumpFilterMemory = 0x00000008,

    MiniDumpScanMemory = 0x00000010,

    MiniDumpWithUnloadedModules = 0x00000020,

    MiniDumpWithIndirectlyReferencedMemory = 0x00000040,

    MiniDumpFilterModulePaths = 0x00000080,

    MiniDumpWithProcessThreadData = 0x00000100,

    MiniDumpWithPrivateReadWriteMemory = 0x00000200,

    MiniDumpWithoutOptionalData = 0x00000400,

    MiniDumpWithFullMemoryInfo = 0x00000800,

    MiniDumpWithThreadInfo = 0x00001000,

    MiniDumpWithCodeSegs = 0x00002000,

    MiniDumpWithoutAuxiliaryState = 0x00004000,

    MiniDumpWithFullAuxiliaryState = 0x00008000,

    MiniDumpWithPrivateWriteCopyMemory = 0x00010000,

    MiniDumpIgnoreInaccessibleMemory = 0x00020000,

    MiniDumpValidTypeFlags = 0x0003ffff,

};

在这里我挑几个重要的值描述一下:

MiniDumpNormal: 基本的参数,值为0,也就是说不包含额外的信息的一种情况,创建出来的Mini Dump仅包含所有线程的栈回溯信息。

MiniDumpWithDataSegs:指定MiniDump包含进程加载的所有模块的节区的信息,例如A.dll.text的节区信息

MiniDumpWit

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值