2010-02-11 3 views
2

Je débogue un programme C++ avec GDB sous Linux, et j'ai besoin de voir la valeur d'une variable membre pendant l'exécution du programme. La variable membre, malheureusement, est nommée list, qui se trouve être un mot clé GDB. Alors, quand je tente:Conflit de nom de variable avec le débogueur GDB

print m_operations.m_data[10].m_data.list

Je reçois ...

A syntax error in expression, near list'.

J'ai essayé toutes sortes de choses pour indiquer à GDB que j'entrer dans une expression littérale, comme mettre deux ou des guillemets simples autour du nom de la variable, mais cela entraîne simplement plus d'erreurs de syntaxe. J'ai regardé dans le manuel GDB et je ne trouve rien pour résoudre ce problème. Je ne peux pas renommer la variable membre parce que je ne suis pas autorisé à modifier cette classe. En outre, list est un objet C++, pas un entier normal ou POD, donc je ne peux pas simplement utiliser le mot-clé x pour examiner la mémoire là-bas ... du moins pas sans passer du temps à déchiffrer ce que représente le binaire brut.

Alors, des suggestions pour résoudre ce problème?

+0

Pouvez-vous coller un peu plus de votre interaction gdb s'il vous plaît? Je peux seulement reproduire votre erreur avec une syntaxe C++ clairement fausse. – EightyEight

+0

Quel est le type de 'm_data' (le second)? – mark4o

Répondre

2

Le problème est pas ce que vous pensez qu'il est - si je déboguer le code suivant:

int main() { 
    int list = 666; 
    while(list) { 
     list--; 
    } 
} 

Je peux briser sur la troisième ligne et dire:

(gdb) print list 

qui me donne:

$1 = 666 

Il doit y avoir quelque chose d'autre qui ne va pas avec l'expression que vous essayez d'imprimer. Avez-vous essayé d'utiliser un débogueur GUI, comme DDD, qui vous permettra de sélectionner la chose que vous voulez imprimer en cliquant avec la souris?

1

Il s'agit probablement d'un bogue dans GDB (ou éventuellement dans GCC).

Essayez d'abord la dernière GDB (7.0.1).

Si cela échoue, essayez de créer un scénario de test autonome simple et déposez un bogue dans GDBbugzilla. Si vous faites cela, être sûr pour savoir quelle version de GCC a été utilisée pour compiler votre test.

Questions connexes