您的位置:首页 > 其它

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

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





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

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

3. 执行 Ctrl + C。

4. 执行 .loadby sos.dll mscorwks

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





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

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

8. 执行 !clrstach –a :





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

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

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





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





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

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





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

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





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





内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐