【问题标题】:Retrieving process statistics from mdmp file从 mdmp 文件中检索进程统计信息
【发布时间】:2015-11-25 02:44:09
【问题描述】:

WinDbg 检索进程统计信息的命令有哪些

  • 句柄数,
  • 线程数,
  • 内存消耗,
  • CPU 消耗,
  • 等。

来自.mdmp类型的内存转储文件?

【问题讨论】:

  • 是用户模式 ​​minidup 或 kernelmode minidump 如果它是 kernelmode minidump try !process 0 0 user mode minidump 只包含堆栈和特定进程的 reister 通常崩溃的 minidump 对深度挖掘是无用的跨度>
  • 用户模式小型转储。此小型转储特定于应用程序崩溃。
  • 你可以运行 ~* 来查找线程 !handle 0 以获得所有线程链的堆栈跟踪的句柄列表(如果 minidump 不包含句柄数据,那么你就不走运了)~*与 kb 类似 ~*kb
  • 注意:kb 在 x64 上具有误导性

标签: windows winapi mfc windbg memory-dump


【解决方案1】:
load the dump in windbg.
1.) ~* - gives all the threads in loaded process and their stacks.
2.) !runaway - gives execution time for individual threads
3.) !handle - lists all the handles of the application

如果是全内存转储,可以使用以下方式获取内存和堆信息:

1.) !address <>
2.) !heap

获得地址后,您需要转储各个地址/块以查看内存信息。

内存消耗和 CPU 消耗计数器不是小型转储的一部分。 #1 中的信息应该足以让您了解导致崩溃的违规调用。

【讨论】:

  • // 0 Id: b30.a80 Suspend: 0 Teb: 7ffdf000 Unfrozen Start: MyApp+0x33d0f (00433d0f) Priority: 0 Priority class: 32 Affinity: f // 你能帮我解码这个吗信息,我如何找到实际的线程名称。
  • 如果你使用Visual Studio,关闭优化,重新编译。这应该使用 pdb 构建,这将使转储更有用
  • ~* 不显示堆栈。你的意思是~*k 显示堆栈吗?对于概述而言,这再次可能过于冗长。您可能需要!runaway 7 了解更多详情。使用!address -summary 进行概述。写入的命令!address &lt;&gt; 失败并显示错误消息。对于堆统计,!heap -s 可能更适合获得初步概览。我经常使用的另一个命令:.time
猜你喜欢
  • 2013-07-14
  • 1970-01-01
  • 1970-01-01
  • 2012-02-26
  • 2023-03-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-02-09
相关资源
最近更新 更多