gdb wstring

Cómo imprimir wstring en gdb



(3)

Supongamos que tienes una std::wstring str . Lo siguiente debería funcionar en gdb:

call printf("%ls", str._M_data())

(La opción -l en printf lo convierte en una cadena larga, y creo que necesita la sentencia " call " porque a la versión estándar de gdb no le gusta esa opción).

¿Cómo puedo imprimir wstring en gdb?


call printf %ls solo funciona a veces, pero para que funcione en gdb 6.3 necesita el vaciado de espacio void y el avance de línea /n muestran aquí:

call (void)printf("/"%ls/"/n",str.c_str())

aquí hay un comando más confiable que puede poner en su .gdbinit que también muestra los puntos de código que no son ASCII:

define wc_print echo " set $c = (wchar_t*)$arg0 while ( *$c ) if ( *$c > 0x7f ) printf "[%x]", *$c else printf "%c", *$c end set $c++ end echo "/n end

simplemente ingrese wc (abreviatura de wc_print ) con std::wstring o wchar_t* .

Más detalles en http://www.firstobject.com/wchar_t-gdb.htm


Hice algunas investigaciones, y esto es gdb PR716 , PR1998 , PR2264 . Aparentemente esta es una característica solicitada con frecuencia que aún no se implementó.