WinDbg and SoS, how do I print/dump a large string?

后端 未结 4 989
渐次进展
渐次进展 2020-12-30 04:59

I am debugging a hangdump coming from a production server using WinDbg with the SoS extension.

There is a string parameter in one of the stacks, that I need to know

4条回答
  •  情歌与酒
    2020-12-30 05:38

    Here is a script I wrote to dump strings to a file within windbg.

    $$ Dumps the managed strings to a file
    $$ Platform x86
    $$ Usage $$>a<"c:\temp\dumpstringtofolder.txt" 6544f9ac 5000 c:\temp\stringtest
    $$ First argument is the string method table pointer
    $$ Second argument is the Min size of the string that needs to be used filter
    $$ the strings
    $$ Third is the path of the file
    .foreach ($string {!dumpheap -short -mt ${$arg1}  -min ${$arg2}})
    { 
    
      $$ MT        Field      Offset               Type  VT     Attr    Value Name
      $$ 65452978  40000ed        4         System.Int32  1 instance    71117 m_stringLength
      $$ 65451dc8  40000ee        8          System.Char  1 instance       3c m_firstChar
      $$ 6544f9ac  40000ef        8        System.String  0   shared   static Empty
    
      $$ start of string is stored in the 8th offset, which can be inferred from above
      $$ Size of the string which is stored in the 4th offset
      r@$t0=  poi(${$string}+4)*2
      .writemem ${$arg3}${$string}.txt ${$string}+8 ${$string}+8+@$t0
    }
    

    and this is how it can be used$$>a<”c:\temp\dumpstringtofolder.txt” 6544f9ac 5000 c:\temp\stringtest

    The dumped contents would be in Unicode format and to view its contents use something like this Console.WriteLine(ASCIIEncoding.Unicode.GetString(File.ReadAllBytes(@"c:\temp\stringtest03575270.txt")));

    HTH

提交回复
热议问题