Can DebugDiag generate reports with “inclusive size” like Visual Studio 2013

前端 未结 1 634
梦谈多话
梦谈多话 2021-01-22 11:17

Visual Studio 2013 can show a column for inclusive size (which includes size of child objects) - http://blogs.msdn.com/b/visualstudioalm/archive/2013/10/16/net-memory-analysis-e

1条回答
  •  -上瘾入骨i
    2021-01-22 12:07

    DebugDiag

    DebugDiag 2 has totally been rewritten and is now a set of executables (EXE and DLL). It is no longer a set of scripts which you could easily modify to include additional information that you want to be there.

    The output of DebugDiag is simiar to what you see in WinDbg+SOS's !dumpheap -stat output:

    ...
    575a4518    11547       560508 System.Object[]
    575d37b8       91       892344 System.Byte[]
    575d2ee4     3488       927512 System.Int32[]
    575d0d48    72920      6939284 System.String
    Total 120639 objects
    

    Other approaches

    SOS !do

    gives only the size without children, but there is SOS !objsize
    , which seems to include children (can't cross check with Visual Studio 2013, only have 2012):

    0:008> !do 0b938584 
    Name: SomeClass
    MethodTable: 08947c0c
    EEClass: 08956c38
    Size: 292(0x124) bytes
    ...
    
    0:008> !objsize 0b938584 
    sizeof(0b938584) =        11728 (      0x2dd0) bytes (SomeClass)
    

    To do that for all objects on the heap, you can execute !objsize for each object in a loop:

    .foreach (address {!dumpheap -short}) {!objsize ${address}}
    

    The only command I know that lists property values recursively is SOSEX's !mdt

    -r, but it will not output the size.

    Analyzing root objects only with Pykd

    Starting point for a Pykd script:

    0:000> .loadby sos clr; .loadby sos mscorwks
    0:000> .load \sosex.dll
    0:000> .load \pykd.pyd
    0:000> !pycmd
    >>> gch = dbgCommand("!gch")
    >>> lines = gch.split('\n')
    >>> for line in lines: dprint(dbgCommand("!objsize "+line[34:50]))
    ...
    

    Press Enter after ... appears. Note that [34:50] this might need to be adapter for 32 bit.

    0 讨论(0)
提交回复
热议问题