强悍的工具SOS(.NET)

从VC++走过来的人一定很怀念Memory window,可以查看内存地址中存储的东西。并结合单步根据查看内存中的变化。C#隐藏了内存管理细节,减轻的程序员的负担,但也较少了一种调试手段。SOS作为一种dump工具,可以帮助我们进行高级调试。

HDNGO对于string问题的解释

问题:

string text="simple string";
text="other string";
这个时候text已经不是原来的text了,谁能讲解得透彻一些?

回答:

string的这一特性是指,对于已有的一个string对象,当你修改它时,实际是重新创建了一个符合你要求的string对象。我通过以下的例子进行演示:
C# code

static void Main(string[] args)
{
    string x = "should it matter";
    x = x + " ?"; //breakpoint (1)
}//breakpoint (2)F5运行至breakpoint (1)处,在即时窗口中执行以下sos调试命令(关于sos调试扩展,可以参见《VS 2005中Sos调试扩展简介》):

!load sos.dll
extension C:"WINDOWS"Microsoft.NET"Framework"v2.0.50727"sos.dll loaded
!clrstack -a
PDB symbol for mscorwks.dll not loaded
OS Thread Id: 0x1508 (5384)
ESP       EIP    
0012f440 012f009f ConsoleApplication1.Program.Main(System.String[])
    PARAMETERS:
        args = 0x0137cdc8
    LOCALS:
        <CLR reg> = 0x0137cdd8
0012f69c 79e7c74b [GCFrame: 0012f69c]

 
又F5运行至breakpoint (2)处,重新执行clrstack命令,结果如下。可清楚看到对象x在内存中的地址发生了变化,由原来的0x0137cdd8变成0x0137ce24。


!clrstack -a
OS Thread Id: 0x1508 (5384)
ESP       EIP    
0012f440 012f00b0 ConsoleApplication1.Program.Main(System.String[])
    PARAMETERS:
        args = 0x0137cdc8
    LOCALS:
        <CLR reg> = 0x0137ce24
0012f69c 79e7c74b [GCFrame: 0012f69c]

绝对权威的回答!!

网友的博客,中文介绍:

VS2005中Sos调试扩展简介

http://www.cnblogs.com/KissKnife/archive/2008/10/19/1314447.html

官方资料:

How to: Use SOS
http://msdn.microsoft.com/en-us/library/yy6d2sxs.aspx
SOS Debugging Extension (SOS.dll)
http://msdn.microsoft.com/en-us/library/bb190764.aspx

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值