《Advanced .NET Debugging》 读书笔记 Listing 3-10到3-14: 得到程序中各对象的内容

针对的程序为03ObjTypes.cs,其部分代码如下,试图让程序在断点处,得到其中ObjTypes中的coordinate对象,intArray对象,strArray对象和本地的point对象的具体值。

image

1. 在WinDbg下载入03ObjTypes.exe。

2. 连续执行两次 g, 到程序要求按任意键继续处。

3. 执行 Ctrl + C。

4. 执行 .loadby sos.dll mscorwks

5. 执行  !name2ee 03ObjTypes.exe Advanced.NET.Debugging.Chapter3.ObjTypes.AddCoordinate

image

6.  按要求执行 !bpmd 命令添加断点

7. 执行 g, 此时程序将在上图的断点处停下。

8. 执行 !clrstach –a :

image

此时可以发现Main()方法内存在两个local的指针,其中第一个使用!dumpobj 命令可以判定是一个ValueType,因此它是Main()方法内声明的Coordinate类型的object对象。

而第二个指针则应该指向了在Main()方法内声明的ObjTypes类型的ob对象,该obj对象内包括三个对象: coordinate, intArray和strArray。

9. 对于Main方法声明的本地的对象,可以直接使用dd命令得到point对象内的值(0x64 = 100):

image

10. 对于ReferenceType类型的对象,执行 !DumpObj

image

可见heap上的该reference type类型的对象包含三个对象, coordinate, intArragy和strArray,其中coordinate为Value Type, 而intArray和strArray为reference type

11. 对于值类型 coordinate,执行 !dumpvc  000007ff000434e0 00000000023d5f58可以得到coordinate的具体的值:

image

12. 对于reference type的intArray和strArray,由于他们是数组,可以直接执行!dumpArray命令来获得他们值。

      执行 !DumpArray –details 0x23d6040 ,可以看到数组内的各元素的值:

image

13. 对于strArray,执行 !DumpArray –details 0x23d6070  ,可以得到string内各个元素的值:

image

posted on 2010-12-26 19:33  李志鹏  阅读(245)  评论(0)    收藏  举报

导航