《Advanced .NET Debugging》 读书笔记 Listing 2-7: 使用debugger查看对象的syncblk的数据
改例主要是为了说明托管heap的结构:
可见每个对象实体前面的头部都包括两部分内容,一个是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:
在该对象的位置退回4个字节,可以得到syncblk指针的值。可见在不需要sync的情况下,该值为0,表示没有指向任何对象。
8. g
9. !clrstack –a:
从源程序可以看出,程序里有lock(this);因而导致sync出现,此时sync指针出现,而不再是0.



浙公网安备 33010602011771号