2010-12-12 55 views
0

Ceci est vraiment bizarre et je me demande si je dois changer un peu mon style de codage ou si gdb me dérange.Déclarations de variables à l'intérieur d'une méthode provoquant une sortie garbage gdb avant l'instanciation

La structure d'un de mes méthodes ressemble à ceci:

{ 
    // code that checks if this method needs to do something 
    // ... 

    // further down, I instantiate e.g. foo as an NSArray 
    NSArray *foo = bar; 
    // ... 
} 

Si je déboguer le code ci-dessus, j'arrive d'avoir une NSDictionary tailles appelées. Parce que je suis l'instanciation foo quelques lignes dans la méthode, je continue à recevoir ces erreurs dans la console jusqu'à foo est créé:

-[__NSCFDictionary objectAtIndex:]: unrecognized selector sent to instance 0x541cb90 

La raison pour laquelle cela se produit est que deux tailles et foo pointent en même 0x541cb90 mémoire. Mais comme je n'ai pas encore créé foo, je ne peux rien y faire. L'erreur apparaît à plusieurs reprises jusqu'à ce que je passe au point foo = bar, où il cesse d'apparaître. La raison pour laquelle il apparaît est que je pense parce qu'il essaie de me montrer les valeurs pour cela dans la fenêtre de la variable de débogage à droite.

Cela peut être lié à libXcodeDebuggerSupport.dylib is missing in iOS 4.2.1 development SDK

est-il pratique tout simplement mauvais de déclarer des variables « à travers » une méthode comme celui-ci? Il est inutile de déclarer toutes les variables que j'ai l'intention d'utiliser dans une méthode tout en haut, mais peut-être que je dois ...?

Répondre

1

Je n'ai pas vu ce problème particulier, mais j'aurais tendance à considérer les variables aussi proches que possible de l'endroit où elles sont utilisées - exactement comme vous le faites. Comme une sorte de test de l'attitude d'Apple, je me suis connecté à l'iOS Developer Center et j'ai saisi - au hasard - les exemples de projets avTouch, GLSprite et AccelerometerGraph. Parmi ceux-là, avTouch déclare sans ambiguïté les variables mid-method aux lignes 171, 183 et 188 de avTouchController.mm. Il y a aussi un couple déclaré en haut d'un bloc (au sens ancien, pas au sens du GCD). GLSprite contient des déclarations de méthode intermédiaire aux lignes 107 et 108 de EAGLView.m.

AccelerometerGraph contient des déclarations similaires aux lignes 257, 332 et 516 de GraphView.m, ainsi que d'autres exemples de variables en haut d'un bloc.

Dans aucun des projets, j'ai vu une variable qui semblait avoir été déplacée artificiellement vers le haut d'une méthode.

Je suis donc enclin à penser qu'Apple est d'accord avec vous et moi. C'est juste le front graphique Xcode à GDB qui n'est pas utile.

+0

C'est ce que j'espérais. Merci d'avoir donné un deuxième avis sur celui-là. :) Donc la conclusion ici est que gdb ou Xcode ou les deux sont bugging sur moi. Je suppose que le radar est mon prochain arrêt. – Kalle