《Advanced .NET Debugging》 读书笔记 Listing 2-7: 使用debugger查看对象的syncblk的数据

改例主要是为了说明托管heap的结构:

image

可见每个对象实体前面的头部都包括两部分内容,一个是syncblk,用于同步对象,里面存放的是指向另外一个统一管理的空间的指针;另一个type handler,存放了关于这个实例对象的内容的描述信息。

 

1. 载入02typesample.exe

2. .loadby sosex.dll

3. !mbp 02typesample.cs 34

4. !mbp 02typesample.cs 41

5. g

6. .loadby sos.dll mscorwks

7. !clrstack –a:

image

在该对象的位置退回4个字节,可以得到syncblk指针的值。可见在不需要sync的情况下,该值为0,表示没有指向任何对象。

8. g

9. !clrstack –a:

image

从源程序可以看出,程序里有lock(this);因而导致sync出现,此时sync指针出现,而不再是0.

posted on 2010-12-24 00:17  李志鹏  阅读(419)  评论(0)    收藏  举报

导航