2023年1月

MiniDump向导应用程序允许在不编写代码的情况下尝试MiniDumpWriteDump和MiniDumpCallback函数。可以指定将传递给MiniDumpWriteDump函数的MINIDUMP_TYPE标志的组合,并且可以在一系列对话框中响应MiniDumpCallback调用。

如何使用MiniDump Wizard

启动MiniDump向导时,它会显示一个对话框窗口,允许您选择将传递给MiniDumpWriteDump函数的MiniDump类型标志。在同一对话框中,可以指定要响应的回调类型。
对话框还允许指定目标进程。您可以指定目标的进程标识符(pid),也可以为小型转储向导进程本身创建小型转储。为了探索为小型转储向导进程创建的小型转储的内容,提供了MiniDumpWiz.pdb文件。

在第一个对话框中指定所有设置后,按Next将创建小型转储(如果未选择回调选项),或显示指定调用小型转储回调函数的对话框页,您可以在其中检查传递给回调的数据并响应回调调用(通过使用对话框控件修改回调的返回值、MINIDUMP_CALLBACK_OUTPUT structure的内容,或同时修改两者)。

微型转储文件将被称为MiniDumpWiz.dmp。目前无法更改其名称(这是为了使应用程序尽可能简单)。

MiniDump Wizard 界面介绍

主界面

启动MiniDump Wizard时始终显示此页。

  • “Target process”组允许指定目标进程。您可以指定目标进程的十进制进程id(PID),也可以选择“MiniDump Wizard”选项来转储微型转储向导进程(在后一种情况下将引发人工异常)。
  • “Show callbacks”组允许选择应处理的回调类型。
  • “MINIDUMP_TYPE flags”组允许指定将传递给MiniDumpWriteDump函数的MINIDUMP_TYPE标志。

CancelCallback页

当使用CancelCallback回调类型调用MiniDumpCallback函数时,将显示此页。

  • “Response”组允许设置或更改MINIDUMP_CALLBACK_OUTPUT结构的Cancel和CheckCancel成员的值。
  • “Callback return value”组允许指定回调函数的返回值。

IncludeThreadCallback页

当使用IncludeThreadCallback回调类型调用MiniDumpCallback函数时,将显示此页。

  • “Thread information”组显示MINIDUMP_INCLUDE_THREAD_CALLBACK结构的内容。
  • “Callback return value”组允许指定回调函数的返回值。

IncludeModuleCallback页

当使用IncludeModuleCallback回调类型调用MiniDumpCallback函数时,将显示此页。

  • “Module information”组显示Callback return value结构的内容。
  • “Callback return value”组允许指定回调函数的返回值。

ModuleCallback页

当使用ModuleCallback回调类型调用MiniDumpCallback函数时,将显示此页。

  • “Module information”组显示MINIDUMP_MODULE_CALLBACK 结构的内容。
  • “Module write flags”组允许设置或清除MINIDUMP回调输出结构的Module write flags成员中的标志。
  • “Callback return value”组允许指定回调函数的返回值。

 

ThreadCallback页

当使用ThreadCallback回调类型调用MiniDumpCallback函数时,将显示此页。

  • “Thread information”组显示MINIDUMP_MODULE_CALLBACK结构的内容。
  • “Thread write flags”组允许设置或清除MINIDUMP_CALLBACK_OUTPUT结构的ThreadWriteFlags成员中的标志。
  • “Callback return value”组允许指定回调函数的返回值。

 

 

MemoryCallback页

当使用MemoryCallback回调类型调用MiniDumpCallback函数时,将显示此页。

  • “Include memory range”组允许指定其内容应包含在小型转储中的内存范围的基址和大小。两个数字都必须是十六进制,没有前缀。
  • “Callback return value”组允许指定回调函数的返回值。

简介

MiniDumpView实用程序可用于显示minidump中数据流的内容。特别是,可以显示以下信息:

  • 操作系统和CPU信息
  • 进程信息(进程ID和时间)
  • 模块列表(包含每个模块的详细信息)
  • 线程列表(包含每个线程的详细信息)
  • 异常信息
  • 保存在小型转储中的内存区域列表
  • 打开的句柄列表
  • 虚拟内存布局
  • 注释

以绿色包的形式提供,解压后可用

用法

  1. 设置环境变量
  2. 命令行里执行
    MdpView FileName
    其中FileName是小型转储文件的名称

     

     

     

     SYSTEM INFORMATION
    ------------------

    Number of processors:  8
    Architecture:          0 (Intel)
    Level:                 6
    Revision:              24067
    OS version:            10.0.17134
    Service pack:          
    Platform ID:           2 (WinNT)


    COMMENTS (ANSI)
    ---------------

    Not available.



    COMMENTS (UNICODE)
    ------------------

    Not available.



    PROCESS INFORMATION
    -------------------

    Process ID:  bd4
    CreateTime:  5dd365de  Tue Nov 19 11:47:42 2019
    UserTime:    000005f7  0 days 0:25:27
    KernelTime:  0000011b  0 days 0:04:43


    EXCEPTION INFORMATION
    ---------------------

    Thread ID:             c4c

    Code:                  c0000409
    Flags:                 00000001
    Address:               69457666
    Nested exception:      00000000
    Parameters:            1
      [0] = 00000007

    Thread context:

    Context flags: 0001003f
    EIP: 69457666   ESP: 00efdd4c   EBP: 00efdd60   EFLAGS: 00200202
    EAX: 00000001   EBX: 17bc9020   ECX: 00000007   EDX: 000001e0
    EDI: 17bc9430   ESI: 17bc9020
    CS:  0023       SS:  002b
    DS:  002b       ES:  002b       FS:  0053       GS:  002b
    DR0: 00000000   DR1: 00000000   DR2: 00000000   DR3: 00000000
    DR6: 00000000   DR7: 00000000


    THREAD INFORMATION
    ------------------

    Number of threads:     60

    .....

说明

MiniDumpView依赖于DbgHelp.dll(需要DbgHelp.dll 6.3.17.0或更新版本)。该DLL必须与MiniDumpView可执行文件位于同一目录中。

对内存转储时发生的事情有一定的了解是非常重要的。这有助于您确定要执行哪些WinDbg命令,并为您提供一些有关如何解释这些命令输出的上下文。我正在查看一个服务器的内存转储,该服务器存在性能问题。我在内存转储中根本没有看到任何运行,这意味着被转储的进程不是有问题的进程,或者,转储是从错误的机器上获取的? 是的。

我正在查看一个服务器的内存转储,该服务器存在性能问题。我在内存转储中根本没有看到任何运行,这意味着被转储的进程不是有问题的进程,或者,转储是从错误的机器上获取的(?),是的。
我查看了服务器A的PERFMON日志,发现服务器B有一个转储,问题发生在Web场中,因此可能会发生这种日志不一致。很难找到Web场中哪个服务器是出现问题的特定服务器。
你看,当你分析内存转储时,你什么也看不到,然后你开始问自己一些问题,其中一个问题是:这个转储是从有性能问题的服务器获取的吗?要找到这个结果,您需要知道服务器名,然后使用这个命令找到这个结果:

0:000> !envvar COMPUTERNAME
        COMPUTERNAME = LENOVO1-PC
WinDbg附带的帮助文档是了解WinDbg的一个很好的来源。如图所示,您可以详细阅读关于什么的内容!envvar是并且它从Exts.dll获取值,是环境变量的转储。

 

!envvar

简介

!envvar扩展命令显示特定环境变量的值。

使用形式

!envvarVariable

参数

  •  Variable
    指定显示其值的环境变量。变量不区分大小写。