TTD 堆对象
说明
TTD 堆 对象用于提供有关跟踪过程中发生的堆调用的信息。
属性
每个堆对象都将具有这些属性。
properties | 说明 |
---|---|
操作 | 描述发生的操作。 可能的值包括:Alloc、ReAlloc、Free、Create、Protect、Lock、Unlock、Destroy。 |
堆 | Win32 堆的句柄。 |
条件属性
根据堆对象,它可能具有以下一些属性。
properties | 说明 |
---|---|
地址 | 已分配对象的地址。 |
PreviousAddress | 重新分配已分配对象的地址。 如果 Address 与 PreviousAddress 不同,则重新分配导致内存移动。 |
大小 | 已分配对象的大小和/或请求的大小。 |
BaseAddress | 堆中已分配对象的地址。 它可以表示将在重新分配对象之前释放的地址(Free)或对象的地址。) |
Flags | 含义取决于 API。 |
Result | 堆 API 调用的结果。 非零表示成功,零表示失败。 |
ReserveSize | 要为堆保留的内存量。 |
CommitSize | 堆的初始提交大小。 |
MakeReadOnly | 非零值指示发出使堆只读的请求;零值指示堆应是读写的。 |
Children
Object | 说明 |
---|---|
TimeStart | 一个 位置对象 ,描述分配开始时的位置。 |
TimeEnd | 描述 分配末尾位置的位置的位置对象 。 |
用法示例
使用此 dx (显示调试器对象模型表达式) 命令可以使用 -g 选项在网格中显示堆内存。
0:0:000> dx -g @$cursession.TTD.Data.Heap()
=======================================================================================================================================================
= = Action = Heap = Address = Size = Flags = (+) TimeStart = (+) TimeEnd = Result = PreviousAddress =
=======================================================================================================================================================
= [0x0] : [object Object] - Alloc - 0xaf0000 - 0xb0cfd0 - 0x4c - 0x0 - FAB:17B1 - FAD:40 - - =
= [0x1] : [object Object] - Alloc - 0xaf0000 - 0xb07210 - 0x34 - 0x8 - FB1:9 - FB3:74 - - =
= [0x2] : [object Object] - Alloc - 0xaf0000 - 0xb256d8 - 0x3c - 0x8 - E525:174 - E526:E1 - - =
输出可以描述为“规范化数据”,因为有一组选择的 API 表示堆操作。 从适当参数中提取的数据以统一的方式呈现。
单击 TimeStart 或 TimeEnd 将导航到跟踪中的该点。
单击特定条目旁边的参数字段,以显示可用的参数信息。
dx -r1 @$cursession.TTD.Data.Heap()[2].@"Parameters"
@$cursession.TTD.Data.Heap()[2].@"Parameters"
[0x0] : 0x16c7d780000
[0x1] : 0x280000
[0x2] : 0x20
[0x3] : 0x0
...
增加递归 -r 值以显示其他信息。