【问题标题】:How to generate Windows complete memory dump correctly?如何正确生成 Windows 完整内存转储?
【发布时间】:2018-03-29 20:19:41
【问题描述】:

请找到转储示例on Google Drive(完整转储但缺少有用信息)。平台为 Win10 x64 RS2。

我正在尝试进行完整的内存转储以分析我的应用程序。 我使用 DumpConfigurator Utility 来设置我的环境according to MSDN。我还将转储键更改为 Ctrl+Space according to MS Technet

我正在尝试分析所有进程的调用堆栈,因此我需要 !process 信息。

转储生成后,我尝试使用 WinDbg 分析转储中的进程。 但我无法通过!process!dml_proc 获得任何有用的信息。

它显示:

0: kd> !process
Error in reading nt!_EPROCESS at ffffd081a0a56040
0: kd> !dml_proc
ERROR: !dml_proc: extension exception 0x80004005.
"Unable to get type ID of 'nt!_EPROCESS'"

我想问为什么会发生这种情况以及如何正确生成转储。

【问题讨论】:

  • 小型转储不是一个进程。如果你提到你需要什么样的信息就好了。但是,唉,有人将不得不写一本手册。给它 6 到 8 周。
  • 我不确定您是否理解内核模式和用户模式内存转储之间的区别。 !process 只能用于整个计算机的转储 - 即内核转储。您是要分析进程中的所有线程还是系统上的所有进程?您具体要查找哪些信息?
  • 我想要所有信息,所以我尝试生成一个完整的转储(内存转储类型:完成)。

标签: windows windbg dump


【解决方案1】:
  • 检查并确保您的页面文件与 \Windows 位于同一驱动器上 (系统驱动器)并且它大于物理 RAM 的大小 机器
  • 如果在其他驱动器上,请查看专用转储驱动器 注册表设置为页面文件使用不同的驱动器(WRT 内存转储)。
  • 确保您使用的是有效的 MS 公共符号

从您的内存转储来看,它似乎已配置为完整转储:

内核位图转储文件:可用的完整地址空间

但是,根据各种命令的输出,看起来可能的罪魁祸首是页面文件的大小或其位置(或两者兼而有之)。请参阅上面提到的要点。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-04-29
    • 2015-12-05
    • 1970-01-01
    • 2019-06-17
    相关资源
    最近更新 更多