debugging - tipos - Imprimir direcciones de todas las variables locales en C
variables estaticas en c (2)
No hay un comando incorporado para hacer esto. Hay una solicitud de función abierta en gdb bugzilla para mostrar el significado de todas las ranuras conocidas en el marco de pila actual, pero nadie lo ha implementado.
Esto se puede hacer con un poco de scripts de gdb. La forma más simple es usar Python para iterar sobre los Blocks
del Frame
seleccionado. Luego, en cada uno de dichos Block
, puede iterar sobre todas las variables e invocar info addr
sobre la variable.
Tenga en cuenta que imprimir la dirección con print &var
no siempre funcionará. Una variable no siempre tiene una dirección, pero, si la variable existe, tendrá una ubicación, que es lo que se mostrará en la información.
Una forma simple en que estas ideas pueden diferir es si el compilador decide poner la variable en un registro. También hay casos más complicados, por ejemplo, el compilador puede poner la variable en diferentes puntos en diferentes puntos de la función; o puede dividir una struct
local en sus partes constituyentes y moverlas.
Por defecto, info addr
intenta imprimir algo vagamente legible por humanos. También puede pedirle que simplemente descargue las expresiones de ubicación DWARF si necesita ese nivel de detalle.
Quiero imprimir las direcciones de todas las variables locales y globales que se utilizan en una función, en diferentes puntos de ejecución de un programa y almacenarlos en un archivo.
Estoy tratando de usar gdb para esto mismo.
El comando "info local" imprime los valores de todas las variables locales. Necesito algo para imprimir las direcciones de una manera similar. ¿Hay algún comando incorporado para eso?
Editar 1
Estoy trabajando en un complemento gcc que genera un gráfico de puntos en tiempo de compilación.
Quiero verificar si el gráfico generado es correcto, es decir, si los punteros apuntan a las variables, a lo que el complemento indica que deberían estar apuntando.
Queremos validar estos puntos: información sobre programas grandes con más de miles de líneas de código. Validaremos esta información usando un programa y no manualmente. Hay varias variables locales y globales en cada función, por lo tanto, no es posible agregar instrucciones printf después de cada línea de código.
programáticamente (en C / C ++) utiliza el operador &
para obtener la dirección de una variable (suponiendo que no sea un puntero):
int a; //variable declaration
print("%d", a); //print the value of the variable (as an integer)
print("0x%x", &a); //print the address of the variable (as hex)
Lo mismo ocurre con (gdb)
, solo use &
además la pregunta ya ha sido respondida aquí (y no solo)