2009-10-17 6 views
7

J'ai regardé autour de moi mais je n'arrivais pas à comprendre comment on pouvait imprimer dans gdb le résultat d'une évaluation. à-dire par exemple dans le code ci-dessous:gdb - comment imprimer le résultat de l'évaluation pour C++

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

(ci-dessus, je tentais une méthode possible pour vérifier l'ordre alphabétique des chaînes, et n'étais pas absolument certain qu'il fonctionne correctement)

maintenant je pouvais regarder min_node voir si la valeur change mais dans un code plus impliqué, c'est parfois plus compliqué. Je me demandais s'il y a un moyen simple de regarder l'évaluation d'un test sur la ligne où gdb/flux de programme est actuellement.

merci beaucoup!

Répondre

16

Il n'y a pas un seul pas à pas de niveau d'expression dans gdb, si c'est ce que vous demandez.

Vos options sont (le plus souvent de la plupart rarement utilisé):

  1. évaluer l'expression dans gdb, faisant print strcmp(current_node->word,min_node->word). Étonnamment, cela fonctionne: gdb peut évaluer les appels de fonction, en injectant du code dans le programme en cours et en l'exécutant le code. Bien sûr, cela est assez dangereux si les fonctions ont des effets secondaires ou peuvent se bloquer; dans ce cas, il est si inoffensif que les gens ne pensent généralement pas à des problèmes potentiels.
  2. effectuer un seul pas au niveau de l'instruction (assemblage) (ni/si). Lorsque l'instruction d'appel est terminée, vous trouvez le résultat dans un registre, conformément aux conventions du processeur (% eax sur x86).
  3. éditer le code pour affecter des valeurs intermédiaires aux variables et les scinder en lignes/instructions séparées; Ensuite, utilisez un pas régulier et inspectez les variables.
+0

grand, merci - cela aide! – nero

4

vous pouvez essayer simplement de taper:

appel « my_funtion() »

pour autant que je Rember, mais il ne fonctionne pas lorsqu'une fonction est inline.

Questions connexes