• 强悍的工具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
    SOS Debugging Extension (SOS.dll)
  • 相关阅读:
    DbgPrint格式 输出
    string 类常用函数[转]
    pragma warning[转]
    连接符
    ubuntu ftp server
    关于dex

    Topology中各函数调用顺序
    C# 错误捕捉
    操作word,Excel,PPT
  • 原文地址:https://www.cnblogs.com/findcaiyzh/p/1979552.html
Copyright © 2020-2023  润新知