Encontré una estructura llamada ngx_http_variable_value_t
en mi sesión de gdb y me gustaría imprimir qué campos tiene en la consola. ¿Es eso posible?¿Cómo muestro qué campos tiene una estructura en gdb?
Respuesta
Puede usar el comando gdb "ptype" para imprimir la definición de una estructura o clase.
Esta es la respuesta correcta por ejemplo, "(gDB) de tipo p tm" "type = struct tm {tm_sec int;.. int tm_min; int tm_hour; int tm_mday; int tm_mon; int tm_year; int tm_wday; int tm_yday; int tm_isdst; largo tm_gmtoff; const char * tm_zone; } "Lo – gaoithe
acerca de las compensaciones? –
@ConradMeyer Lo uso para las compensaciones: '(gdb) p & ((struct foo *) 0) -> member'. Sería bueno tener algo no hacky. – domen
Si tiene símbolos de depuración incorporados, solo debe poder imprimir el valor: print variable
o print *variable
si es un puntero a una estructura.
Sí, imprimir * variable ... por supuesto. – prismofeverything
Y si la variable es un puntero genérico, como un vacío *, puede convertirlo al tipo necesario, 'print ((MY_STRUCT *) variable)', o para obtener un elemento específico de la estructura 'print ((MY_STRUCT *) variable> my_structure_element' –
Solo he hecho esto a través de interfaces gráficas para gdb. Encontré esta entrada en gdb docs en línea. Espero eso ayude. Creo que esto requerirá que el código se haya creado con información de depuración incluida.
ptype [arg] ptype acepta los mismos argumentos que whatis, pero imprime una descripción detallada del tipo, en lugar de simplemente el nombre del tipo.
Me gustaría echar un vistazo a la Data Display Debugger.
Además de usar la opción de línea de comando, también puede usar depuradores gráficos. Sugiero gdbgui, pero hay bastantes por ahí.
responsabilidad: Yo soy el programador de gdbgui
set print pretty on
Esta opción también da saltos de línea y sangría para p *my_struct_pointer
.
la que se hace prefieren:
$2 = {path = {mnt = 0xffff8800070ce1a0, dentry = 0xffff880006850600},last = {{{hash = 3537271320, len = 2}, hash_len = 12127205912}, name = 0xffff88000659501c "../b.out"}
o:
$3 = {
path = {
mnt = 0xffff8800070ce1a0,
dentry = 0xffff880006850600
},
last = {
{
{
hash = 3537271320,
len = 2
},
hash_len = 12127205912
},
name = 0xffff88000659501c "../b.out"
},
}
- 1. Cómo imprimir una estructura C recursivamente en gdb
- 2. Asignación de campos/propiedades en una estructura
- 3. Extraiga los campos de una estructura C
- 4. ¿Cómo trabajar con campos de cadenas en una estructura C?
- 5. ¿Por qué .Net no tiene una estructura de datos establecida?
- 6. ¿Cómo cargo y muestro una imagen PNG en MATLAB?
- 7. "una estructura tiene herencia pública por defecto"
- 8. ¿Java tiene una estructura de datos "LinkedConcurrentHashMap"?
- 9. ¿PHP tiene una estructura de datos establecida?
- 10. Estructura en una estructura
- 11. ¿Por qué Direct3D no tiene su propia estructura de vértices?
- 12. ¿Por qué colgaría gdb?
- 13. ¿ColdFusion tiene una sintaxis corta para crear una estructura?
- 14. ¿Cómo muestro los procesos en ejecución en Oracle DB?
- 15. ¿Cómo muestro qué tipo de objeto se devuelve de una matriz o método?
- 16. ¿Qué es una estructura "empaquetada" en C?
- 17. Si una estructura no puede heredar otra clase o estructura, ¿por qué Int32 tiene un método ToString()?
- 18. ¿Cómo imprimo una matriz Java en gdb?
- 19. ¿Cómo usar una dirección lógica en gdb?
- 20. ¿jQuery tiene una estructura de datos mutable de tipo hashtable?
- 21. ¿Cómo se diferencia una 'estructura const' de una 'estructura'?
- 22. cómo ver la dirección de una estructura en printf
- 23. Cómo importar 'GDB' en Python
- 24. ¿Tiene LaTeX una estructura de datos de matriz?
- 25. Creando un modelo que tiene una estructura de árbol
- 26. ¿Cómo creo y muestro ventanas WPF en hilos separados?
- 27. Estructura de base de datos óptima para campos adicionales entidad
- 28. ¿Por qué gdb me dice que un puntero tiene 4 bytes en x86-64?
- 29. gdb desmontar una línea
- 30. Cómo imprimir una variable en una condición particular en gdb?
Parece que la respuesta de @ Nate es la mejor. – jww