8
votes

C ++ Déboguez Builds Broke In Snow Leopard Xcode

Après la mise à niveau vers Xcode 3.2 et Snow Leopard, mes constructions de débogage sont cassées et échouent au moment de l'exécution. Stringstreams ne semble pas fonctionner. Ils travaillent en mode de sortie.

Je l'ai réduit à une combinaison de GCC 4.2, OSX SDK 10.6 et le symbole de pré-processeur _glibcxx_debug. Ce sont les valeurs par défaut des nouvelles configurations de débogage des projets Xcode. P>

Ce code montre le problème: p>

#include <iostream>
#include <string>
#include <sstream>

int main (int argc, char * const argv[]) {

    std::stringstream stream;
    std::cout << "             expected  actual" << std::endl;
    std::cout << "stream.bad:  0         " << stream.bad() << std::endl;
    std::cout << "stream.fail: 0         " << stream.fail() << std::endl;
    std::cout << "stream.eof:  0         " << stream.eof() << std::endl;
    std::cout << "stream.good: 1         " << stream.good() << std::endl;

    stream.exceptions(std::ios::badbit | std::ios::failbit | std::ios::eofbit);
    try{
        stream << 11;       //< Does not work as expected (see output)
    }catch (std::bad_cast &e) {
        std::cout << "Unexpected bad_cast: " << e.what() << std::endl;
    }catch(std::exception &e){
        std::cout << "Unexpected exception: " << e.what() << std::endl;
    }

    std::cout << "             expected  actual" << std::endl;
    std::cout << "stream.bad:  0         " << stream.bad() << std::endl;
    std::cout << "stream.fail: 0         " << stream.fail() << std::endl;
    std::cout << "stream.eof:  0         " << stream.eof() << std::endl;
    std::cout << "stream.good: 1         " << stream.good() << std::endl;
    std::cout << std::endl;
    std::cout << "EXPECT: " << 11 << std::endl;
    std::cout << "ACTUAL: " << stream.str() << std::endl;

    std::cout << std::endl << "Done" << std::endl;
    return 0;
}


0 commentaires

3 Réponses :


7
votes

Le mode de débogage STL n'est pas pris en charge dans GCC 4.2 pour le moment. Vous pouvez utiliser GCC 4.0 avec le mode de débogage STL ou supprimer les macros de préprocesseur du mode de débogage de votre configuration de débogage et continuez à utiliser GCC 4.2.


3 commentaires

Bien sûr, depuis que GCC est open source, vous pouvez toujours le réparer vous-même.


Merci, est-ce que c'était la GCC d'Apple? Cela fonctionne sur d'autres plates-formes avec cette version. S'il n'est pas pris en charge, alors pourquoi est-ce la valeur par défaut dans Xcode? Apple document-t-il cela n'importe où?


@cdespinosa, avez-vous une source où il est indiqué que le mode de débogage de STL n'est pas pris en charge. En outre, j'ai essayé cela avec OSX Lion et cela ne fonctionne toujours pas.



0
votes

N'oubliez pas de configurer chaque cible si vous en avez beaucoup (j'ai eu ce problème) puisque la configuration de Projet Build ne écrase pas la configuration de la version cible.

J'émis vraiment pour résoudre ce problème, j'utilisais un XP VirtualMachine et Studio 2005 pour éviter ce problème!


0 commentaires

2
votes

Ceci est maintenant un bogue connu et signalé dans le compilateur. Les seules solutions de contournement sont:

  1. Retirez les drapeaux comme vous l'avez suggéré. C'est bon, mais ces drapeaux sont parfois très utiles, et vous ne voulez pas les supprimer des projets et, après que le bogue soit corrigé, revenez à nouveau et mettez-les à nouveau!

  2. exécuté en mode de libération pour tester jusqu'à ce que vous ayez vraiment besoin des symboles de débogueur, puis retirez temporairement les drapeaux.

    J'ai opté pour # 2 afin que lorsque le correctif sort, mais les projets ne manquent pas les drapeaux. Pour plus d'informations, voir:

    Discussions Apple

    BTW, le code que j'ai eu ce problème si ce problème était juste ce simple: xxx


0 commentaires