2009-10-17 8 views
7

He estado mirando a mi alrededor pero no he podido averiguar cómo se puede imprimir en gdb el resultado de una evaluación. es decir, por ejemplo, en el código de abajo:gdb - cómo imprimir el resultado de la evaluación para C++

if (strcmp(current_node->word,min_node->word) > 0) 
     min_node = current_node; 

(por encima de que estaba tratando un posible método para comprobar el orden alfabético para cuerdas, y no estaba absolutamente seguro de que funciona correctamente)

Ahora podía ver min_node y ver si el valor cambia, pero en un código más complicado, esto a veces es más complicado. Me preguntaba si hay una forma simple de ver la evaluación de una prueba en la línea donde actualmente se encuentra el flujo de gdb/programa.

muchas gracias!

Respuesta

16

No hay paso único de nivel de expresión en gdb, si eso es lo que está pidiendo.

Sus opciones son (de más comúnmente utilizados más infrecuentemente):

  1. evaluar la expresión en GDB, haciendo print strcmp(current_node->word,min_node->word). Sorprendentemente, esto funciona: gdb puede evaluar llamadas a funciones, inyectando código en el programa en ejecución y haciendo que ejecute el código. Por supuesto, esto es bastante peligroso si las funciones tienen efectos secundarios o pueden colapsar; en este caso, es tan inofensivo que las personas generalmente no pensarán en problemas potenciales.
  2. realizar el paso a nivel de instrucción (montaje) de paso único (ni/si). Cuando finalice la instrucción de llamada, encontrará el resultado en un registro, de acuerdo con las convenciones del procesador (% eax en x86).
  3. edite el código para asignar valores intermedios a las variables, y divida eso en líneas/declaraciones separadas; luego use pasos simples regulares e inspeccione las variables.
+0

genial, gracias, ¡esto ayuda! – nero

4

simplemente puede tratar de escribir:

llamada "my_funtion()"

Por lo que Rember, a pesar de que no va a funcionar cuando se inline una función.

Cuestiones relacionadas