关于内存转储的问题

时间:2010-11-02 07:58:34

标签: windows windbg crash-dumps minidump

我目前正在尝试设计一个内存转储工具,它可以从另一个进程获取崩溃进程的内存转储。但我对此完全陌生,我想以此为契机,深入了解内存转储技术。

我想知道为崩溃进程创建内存转储的工作范例。我目前的狂野想象如下:

当一个进程崩溃时,操作系统将始终知道(我不知道它应该怎么做)。然后,OS启动了某种机制,将崩溃进程的虚拟地址空间的内容复制到所谓的转储文件中。然后我们可以使用WinDbg来调试转储文件。

我想知道,如果我们可以将崩溃进程的整个虚拟地址空间复制到转储文件中,那么文件是不是太大了?或者我们可以指定要转储的虚拟地址空间(内核/用户)吗?

任何人都可以为我提供一些参考资料,特别是在以下方面:

  1. 什么是内存转储?

  2. 如果有所谓的内核转储和用户模式转储,它们是什么?

  3. 在Windows平台上,我需要哪些API? MiniDumpWriteDump()等函数是否相关?

  4. 当OS检测到某个进程崩溃时,是否有任何可以监视的信号,以便我的Dump Tool会被通知开始转储?

  5. 感谢您花时间看我的话。


    ADD1:

    (5)什么是小型转储?它与内核/用户模式转储有什么关系?

    (6)当我们谈论内存转储时,我们在谈论哪些内存? 虚拟内存物理内存从这个picture开始,我认为它应该是物理内存。

    ADD2:

    我刚刚发现了一个很好的reference关于使用DbgHelp.dll中包含的API编写MiniDump。我想分享一下。如果您能提供与此相关的其他优质材料,您介意分享吗?感谢。

    顺便说一句:我会继续用我的进度来更新这个帖子。任何评论都会深表赞赏。

1 个答案:

答案 0 :(得分:6)

为什么这样做?有很多工具可以做到这一点。 Debugging Tools for Windows包含adplus,来自sysinternals的ProcDump都可以执行此操作。他们都支持丰富的选择,并经过彻底的测试。两者都是免费的。

至于你的其他问题:

1)内存转储是给定进程的内存空间转储。有各种不同级别的详细信息转储。 WinDbg的帮助文件包含所有详细信息。

2)对于用户应用程序,您不需要内核转储。内核转储用于调试内核模式代码 - 即驱动程序和操作系统本身。

3)您可以使用dbgeng.dll(包含在Windows调试工具中)创建用户模式转储,但正如我所说,您应该首先考虑现有工具。

4)Windows使用结构化异常处理,因此崩溃基本上是一个未处理的异常。可以向调试器通知第一次和第二次机会异常,因此它们可以在引发异常时以及没有可用的异常处理程序时创建转储。