Débogage à l'aide de gdb sur un programme sans optimisation, mais encore il n'y a pas de symbole dans le contexte actuel pour les variables locales

J'ai eu ce problème pour tout maintenant, mais semblent toujours mettre en demandant à cette question, car il me semble que je suis en train de faire quelque chose de mal... mais maintenant je sens contraire... pris ce code:

#include <string>
#include <iostream>
#include <algorithm>
int main(int argc, char** argv)
{
  if(argc < 2)
  {
    std::cout << "usage: " << argv[0] << " <string>" << std::endl;
    return 1;
  }
  std::string str = argv[1];
  std::reverse(str.begin(), str.end());
  std::cout << str << std::endl;
  return 0;
}

Compilé avec la commande:

g++ -std=c++11 -Wall main.cpp -o main -O0 -ggdb3

Je suis l'aide d'une très récente tronc version de gcc, je le tronc a été prise autour de, le 23 septembre, ish... notez Également que je ne suis pas de la compilation avec l'optimisation de!

Maintenant de toute façon, j'ai démarrer le débogage, comme ceci:

gdb --quiet --args ./main string

J'ai mis un point d'arrêt à la ligne 12 (à l'inverse de l'algorithme)

b 12

puis-je exécuter le programme

run

alors j'essaie d'imprimer à la chaîne pour voir ce que c'est

print str

Et ce, mes chers amis, c'est ce qui me semble étrange:
La sortie de la commande précédente est:

No symbol "str" in current context.

une vérification rapide pour les variables locales ne montre pas la chaîne soit

info locals

tout ce que j'obtiens est

std::__ioinit = {static _S_refcount = 2, static _S_synced_with_stdio = true}

alors je me demandais, je suis à la faute, ou est le compilateur ou un débogueur à la faute... cela a été une grande douleur dans le cul de problème pour un temps long pour moi... donc merci pour la même lecture de cette question... 🙂

EDIT: maintenant qu'il est devenu clair qu'il ya quelque chose de mal avec mon gcc construire, je me demandais si quelqu'un a à venir à travers un rapport de bogue ou tout autre cas où il semble qu'il y a un problème similaire à ce... je vais aussi essayer de vérifier avec une version récente de gdb pour s'assurer qu'il n'y est certainement pas un problème avec mon débogueur (qui vient avec ubuntu)... cela fait-il sens?

EDIT2: après compilation gdb v7.5, je suis relativement le même résultat sauf qu'il n'y avait pas d'habitants présent à tous... je suppose que cela signifie que c'est un gcc problème, merci à tous...

  • Je n'ai jamais vu de GCC le faire, mais MME compilateurs souvent, quand il est légal de le faire, de reporter la création d'objets jusqu'à ce qu'ils sont d'abord utilisés.
  • hm, c'est intéressant...
  • Je rencontre exactement le même problème, Ubuntu 12.04 x64. Je ne sais pas quoi faire, la locale est std::__ioinit. C'est très ennuyeux, je ne peux pas debug...
InformationsquelleAutor | 2012-09-26