2009-10-07 7 views
44

que tienen una variableCómo imprimir una cadena terminada en nulo con líneas nuevas sin mostrar escapes de barra invertida en gdb?

char* x = "asd\nqwe\n ... " 

y quiero imprimir con nuevas líneas impresas como saltos de línea no barra invertida n. ¿Es posible?

+0

si nada de esto funciona, puede reemplazar el '\ n' con '\ x0a' - esto hará el carbón salto de línea directa. – slashmais

+0

@slashmais: Esto seguirá apareciendo como '\ n' en la salida de gdb – ezpz

+0

En realidad, vine aquí para IMPRIMIR la \ n>.> .. Pude hacer esto: print (char *) [ nsstring cString] – Mazyod

Respuesta

75

Actualización: ¿Por qué no simplemente utilizar el comando gdb printf?

(gdb) printf "%s", x 
asd 
qwe 
... 
(gdb) 

vieja respuesta: Desde dentro del depurador puede ejecutar comandos. Sólo tiene que llamar printf

(gdb) call printf("%s", x) 
asd 
qwe 
... 
(gdb) 
+0

No puedo usar stdout o stderr porque estos canales están conectados a otro programa. –

+0

Espléndido. Gracias. –

+7

Tenga en cuenta que es importante finalizar el comando printf con un/n si su char * no termina con uno. –

17

Utilice el especificador de cadena:

print /s x 
+0

Esto es definitivamente mejor que llamar a las funciones del programa depurado como 'printf', pero solo puede funcionar en versiones relativamente nuevas de GDB: rendimiento de mina" Letra de formato "s" no tiene sentido en el comando "imprimir", por ejemplo. –

+0

Esto no funciona cuando 'x' es una variable que no sea la dirección, en ese caso, necesita el uso del comando' x', por ejemplo 'x/sx', o necesita un tipo de conversión, por ejemplo' p (char *) & x' . –

+1

Esto no funcionará cuando la cadena sea más grande que alguna longitud. Se trunca cuando se imprime. El método printf imprime la cadena completa. – sadashiv30

Cuestiones relacionadas