WinDbg und SoS, wie kann ich drucken/dump ein großer string?
Ich bin Debuggen hangdump aus einem Produktions-server mit WinDbg mit dem SoS-Erweiterung.
Gibt es einen string-parameter in einen der Stapel, die ich brauche, um es zu schätzen wissen. Jedoch, es ist eine ziemlich große string, und WinDbg nicht ausdrucken, wenn ich mit DumpObj
. Dies ist die Ausgabe von DumpObj
:
0:036> !do 00000001b30d8668
Name: System.String
MethodTable: 0000064278436728
EEClass: 000006427803e520
Size: 5125300(0x4e34b4) bytes
(C:\WINDOWS\assembly\GAC_64\mscorlib\2.0.0.0__b77a5c561934e089\mscorlib.dll)
String: <String is invalid or too large to print>
Fields:
MT Field Offset Type VT Attr Value Name
000006427843d998 4000096 8 System.Int32 1 instance 2562638 m_arrayLength
000006427843d998 4000097 c System.Int32 1 instance 2562637 m_stringLength
0000064278438170 4000098 10 System.Char 1 instance 3c m_firstChar
0000064278436728 4000099 20 System.String 0 shared static Empty
>> Domain:Value 0000000000163260:000000007fff0370 00000000001a6760:000000007fff0370 <<
0000064278438020 400009a 28 System.Char[] 0 shared static WhitespaceChars
>> Domain:Value 0000000000163260:000000007fff0b60 00000000001a6760:000000007fff89f0 <<
Wie bekomme ich den Wert dieses string-Instanz ? Vorzugsweise gedumpten in eine Datei.
InformationsquelleAutor driis | 2011-03-18
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ich würde denken, zweimal, bevor dumping 2562638 Zeichen Wert text, aber wenn Sie wirklich wollen, der text ist gespeichert, die folgenden Felder des string-Instanz, so können Sie eine
du <address+offset> <end address>
dump der eigentliche text der Zeichenfolge. Die Ausgabe wird in etwa so Aussehen:Durch die Protokollierung der Sitzung, die Ausgabe in eine Datei können Sie problemlos erfassen Sie die Ausgabe und tun, was post-processing, die Sie benötigen.
Ich bekomme die gleiche Meldung im log als in den Befehl Fenster: <Zeichenfolge ist ungültig oder zu groß, um print - >
Ich verstehe es nicht. Was ist der Befehl, den Sie eingeben würden?
InformationsquelleAutor Brian Rasmussen
Hier ist ein Skript, das ich schrieb, um dump-strings auf eine Datei in windbg.
und dies ist, wie es verwendet werden kann
$$>a<”c:\temp\dumpstringtofolder.txt” 6544f9ac 5000 c:\temp\stringtest
Den gedumpten Inhalt wäre im Unicode-format, und um seinen Inhalt anzuzeigen, verwenden Sie so etwas wie dieses
Console.WriteLine(ASCIIEncoding.Unicode.GetString(File.ReadAllBytes(@"c:\temp\stringtest03575270.txt")));
HTH
Ich war in der Lage, dump-string mit diesem script und ich benutze es oft. Was war das Problem, das Sie ausgeführt wurden? Verwenden Sie es in der x86/x64?
Nicht sicher, ob wir uns verlassen können, auf die Ausgabe !Name2EE aber dies kann verwendet werden, um die Methode auf Tabelle Zeiger automatisch (r@$t1), so konnten wir loswerden von parameter 1. .foreach /pS-7 /ps 4 (methodtable {!Name2EE mscorlib.dll System.String}) { r@$t1= ${methodtable} }
Stimmen. Es könnte automatisiert werden mit
!Name2EE
InformationsquelleAutor Naveen
Wenn Sie in Eile sind, laufen die !nach aktivieren der Protokolle in WinDbg. In der log-Datei, erhalten Sie die gesamte Zeichenfolge.
In WinDbg im Menü, gehen Sie zu Bearbeiten-> Öffnen/Schließen-log-Datei set log file path.
Ich bekomme die gleiche Meldung im log als in den Befehl Fenster: <Zeichenfolge ist ungültig oder zu groß, um print - >
InformationsquelleAutor thewpfguy