WinDbg常用命令系列---!heap
!heap
简介
!heap扩展显示堆使用信息、控制堆管理器中的断点、检测泄漏的堆块、搜索堆块或显示页堆信息。此扩展支持段堆和NT堆。使用!heap没有参数列出所有堆及其类型的堆。
使用形式
!heap [HeapOptions] [ValidationOptions] [Heap]
!heap -b [{alloc|realloc|free} [Tag]] [Heap | BreakAddress]
!heap -B {alloc|realloc|free} [Heap | BreakAddress]
!heap -l
!heap -s [SummaryOptions] [StatHeapAddress]
!heap -i HeapAddress
!heap -x [-v] Address
!heap -p [PageHeapOptions]
!heap -srch [Size] Pattern
!heap -flt FilterOptions
!heap -stat [-h Handle [-grp GroupBy [MaxDisplay]]]
!heap [-p] -?
!heap -triage [Handle | Address]
参数
这些参数适用于Segment和NT堆。
- -s
指定正在请求摘要信息。如果省略SummaryOptions和StatHeapAddress,则显示与当前进程关联的所有堆的摘要信息。 - SummaryOptions
可以是以下选项的任意组合。SummaryOptions不区分大小写。输入!heap -s -?了解更多信息。选项 效果 -v
验证所有数据块。
-b BucketSize
指定存储桶大小。 默认值为1024位。
-d DumpBlockSize
指定存储桶大小。
-a
转储所有堆块。
-c
指定应显示每个块的内容。
- -triage [Handle |Address]
使调试器自动搜索进程堆中的失败。如果将堆句柄指定为参数,则检查该堆;否则,将搜索所有堆中包含给定地址的堆,如果找到,则检查该堆。使用-triage是验证低碎片堆(LFH)损坏的唯一方法。 - -x[-v]
使调试器搜索包含指定地址的堆块。如果添加了-v,该命令将搜索当前进程的整个虚拟内存空间以查找指向此堆块的指针。 - -l
使调试器检测泄漏的堆块。 - -iAddress-hHeapAddress
显示有关指定 堆 的信息。 - Address
指定要搜索的地址。 - -?
在调试器命令窗口中显示此扩展的简短帮助文本。使用!heap -?一般的帮助,而且!heap -p -?页面堆帮助。
这些参数仅适用于NT堆。
- HeapOptions
可以是以下选项的任意组合。HeapOptions值区分大小写。选项 效果
-v
使调试器验证指定的堆。此选项不会检测到低碎片堆(LFH)损坏。使用-triage代替。
WinDbg常用命令系列---!teb
!teb
简介
!teb扩展显示线程环境块(teb)中信息的格式化视图。
使用形式
!teb [TEB-Address]
参数
- TEB-Address
要检查其TEB的线程的十六进制地址。(这不是从线程的内核线程块派生的TEB地址。)如果在用户模式中省略了TEB地址,则使用当前线程的TEB。如果在内核模式下省略,则显示与当前寄存器上下文相对应的TEB。
备注
TEB是Microsoft Windows线程控制结构的用户模式部分。
如果!teb扩展没有参数时,在内核模式下会给您一个错误,您应该使用!process用于确定所需线程的TEB地址。确保您的注册上下文设置为所需的线程,然后使用TEB地址作为!teb的参数。
以下是此命令在用户模式下的输出示例:0:001> ~ 0 id: 324.458 Suspend: 1 Teb 7ffde000 Unfrozen . 1 id: 324.48c Suspend: 1 Teb 7ffdd000 Unfrozen 0:001> !teb TEB at 7FFDD000 ExceptionList: 76ffdc Stack Base: 770000 Stack Limit: 76f000 SubSystemTib: 0 FiberData: 1e00 ArbitraryUser: 0 Self: 7ffdd000 EnvironmentPtr: 0 ClientId: 324.48c Real ClientId: 324.48c RpcHandle: 0 Tls Storage: 0 PEB Address: 7ffdf000 LastErrorValue: 0 LastStatusValue: 0 Count Owned Locks:0 HardErrorsMode: 0
WinDbg常用命令系列---!peb
!peb
简介
!peb显示进程环境块(PEB)中信息的格式化视图。
使用形式
!peb[PEB-Address]
参数
- PEB-Address
要检查其PEB的进程的十六进制地址。(这不是从进程的内核进程块派生的PEB地址。)如果在用户模式中省略PEB地址,则使用当前进程的PEB。如果在内核模式下忽略它,则显示与当前进程上下文相对应的PEB。
支持环境
Windows 2000
Kdextx86.dll Ntsdexts.dll
Windows XP 及更高版本
Exts.dll
备注
PEB是Microsoft Windows进程控制结构的用户模式部分。
如果!peb扩展没有参数时在内核模式下会给您一个错误,您应该使用!process 的进程扩展用于确定所需进程的PEB地址。确保您的进程上下文设置为所需的进程,然后使用PEB地址作为参数。
显示的确切输出取决于Windows版本以及您是在内核模式还是用户模式下进行调试。以下示例取自附加到Windows Server 2003目标的内核调试器:kd> !peb PEB at 7ffdf000 InheritedAddressSpace: No ReadImageFileExecOptions: No BeingDebugged: No ImageBaseAddress: 4ad00000 Ldr 77fbe900 Ldr.Initialized: Yes Ldr.InInitializationOrderModuleList: 00241ef8 . 00242360 Ldr.InLoadOrderModuleList: 00241e90 . 00242350 Ldr.InMemoryOrderModuleList: 00241e98 . 00242358 Base TimeStamp Module 4ad00000 3d34633c Jul 16 11:17:32 2002 D:\WINDOWS\system32\cmd.exe 77f40000 3d346214 Jul 16 11:12:36 2002 D:\WINDOWS\system32\ntdll.dll 77e50000 3d3484ef Jul 16 13:41:19 2002 D:\WINDOWS\system32\kernel32.dll .... SubSystemData: 00000000 ProcessHeap: 00140000 ProcessParameters: 00020000 WindowTitle: 'D:\Documents and Settings\Administrator\Desktop\Debuggers.lnk' ImageFile: 'D:\WINDOWS\system32\cmd.exe' CommandLine: '"D:\WINDOWS\system32\cmd.exe" ' DllPath: 'D:\WINDOWS\system32;D:\WINDOWS\system32;.... Environment: 00010000 ALLUSERSPROFILE=D:\Documents and Settings\All Users APPDATA=D:\Documents and Settings\UserTwo\Application Data CLIENTNAME=Console .... windir=D:\WINDOWS
WinDbg常用命令系列---!findstack
!findstack
简介
!findstack扩展查找包含指定符号或模块的所有堆栈。
使用形式
!findstackSymbol[DisplayLevel]
!findstack -?
参数
- Symbol
指定符号或模块。 - DisplayLevel指定显示内容。这可以是以下任何一个值。默认值为1。
0
显示仅包含每个线程的线程 ID符号。1
显示线程 ID 和包含每个线程的帧符号。2
将显示包含每个线程的整个线程堆栈符号。-?
在调试器命令窗口中显示此扩展的一些简要帮助文本。WinDbg常用命令系列---.write_cmd_hist (写命令历史记录)
.write_cmd_hist
简介
.write_cmd_hist命令将调试器命令窗口的整个历史记录写入文件。
使用形式
.write_cmd_histFilename
参数
- Filename
指定要创建的文件的路径和文件名。
支持环境
此命令仅在 WinDbg 中可用,并能在脚本文件。
模式
用户模式下,内核模式
目标
实时、 崩溃转储
平台
全部
- Filename
- TEB-Address