Estoy depurando un hangdump proveniente de un servidor de producción usando WinDbg con la extensión SoS.WinDbg y SoS, ¿cómo imprimo/vuelco una cadena grande?
Hay un parámetro de cadena en una de las pilas, que necesito saber el valor de. Sin embargo, es una cadena bastante grande, y WinDbg no la imprimirá cuando estoy usando DumpObj
. Esta es la salida de 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 <<
¿Cómo puedo obtener el valor de esta instancia de cuerdas? Preferiblemente descargado a un archivo.
En el caso de cadenas realmente largas, la sintaxis de inicio de dirección/dirección final no funcionará debido a los límites. Necesita usar du L? . Para cadenas realmente largas, esto realmente llevará demasiado tiempo y WinDbg ya no responde. –
Recibo el mismo mensaje en el registro que en la ventana de comandos: –
No entiendo. ¿Cuál es el comando que escribirías? –