Quiero imprimir la longitud completa de una cadena en C en GDB. Por defecto se abrevia, ¿cómo fuerzo a GDB a imprimir toda la cadena?
Quiero imprimir la longitud completa de una cadena en C en GDB. Por defecto se abrevia, ¿cómo fuerzo a GDB a imprimir toda la cadena?
Respuestas:
set print elements 0
set print elements
number-of-elements
Establezca un límite sobre cuántos elementos de una matriz GDB se imprimirán. Si GDB está imprimiendo una gran matriz, deja de imprimir después de haber impreso el número de elementos establecidos por el set print elements
comando. Este límite también se aplica a la visualización de cadenas. Cuando se inicia GDB, este límite se establece en 200. Establecer el número de elementos en cero significa que la impresión es ilimitada .
Mientras su programa esté en un estado sano, también puede call (void)puts(your_string)
imprimirlo en stdout. El mismo principio se aplica a todas las funciones disponibles para el depurador, en realidad.
Hay una tercera opción: el comando x, que le permite establecer un límite diferente para el comando específico en lugar de cambiar una configuración global. Para imprimir los primeros 300 caracteres de una cadena que puede usar x/300s your_string
. La salida puede ser un poco más difícil de leer. Por ejemplo, imprimir una consulta SQL da como resultado:
(gdb) x / 300sb stmt.c_str () 0x9cd948: "SELECCIONAR artículo.r" ... 0x9cd958: "owid FROM articl" ... ..
x
!
El printf
comando imprimirá las cadenas completas:
(gdb) printf "%s\n", string
set print elements nnn
límite y no imprimirá la cadena completa a menos que lo haga set print elements 0
.
Solo para completarlo:
(gdb) p (char[10]) *($ebx)
$87 = "asdfasdfe\n"
Debe dar una longitud, pero puede cambiar la representación de esa cadena:
(gdb) p/x (char[10]) *($ebx)
$90 = {0x61,
0x73,
0x64,
0x66,
0x61,
0x73,
0x64,
0x66,
0x65,
0xa}
Esto puede ser útil si desea depurar por sus valores
Usar set elements ...
no siempre es la mejor manera. Sería útil si hubiera un distinto set string-elements ...
.
Entonces, uso estas funciones en mi .gdbinit:
define pstr
ptype $arg0._M_dataplus._M_p
printf "[%d] = %s\n", $arg0._M_string_length, $arg0._M_dataplus._M_p
end
define pcstr
ptype $arg0
printf "[%d] = %s\n", strlen($arg0), $arg0
end
Advertencias: