S'arrêter sur les sélecteurs inconnus
Céroce
Membre, Modérateur
Bonjour à tous,
Dans la console, j'obtiens ce message à l'exécution:
Le runtime me dit qu'une instance de NSArray a reçu un appel à la méthode repr qu'il ne connaà®t pas. Mon soucis, c'est que j'ai beaucoup d'endroits dans mon programme où la méthode repr est appelée.
Puis-je arrêter le débogueur sur ce genre de messages ? J'ai cherché un peu dans la doc du runtime, mais je n'ai pas trouvé le nom de la fonction appelée en cas d'impossibilité de résoudre la méthode.
Dans la console, j'obtiens ce message à l'exécution:
-[NSCFArray repr]: unrecognized selector sent to instance 0x17d390
Le runtime me dit qu'une instance de NSArray a reçu un appel à la méthode repr qu'il ne connaà®t pas. Mon soucis, c'est que j'ai beaucoup d'endroits dans mon programme où la méthode repr est appelée.
Puis-je arrêter le débogueur sur ce genre de messages ? J'ai cherché un peu dans la doc du runtime, mais je n'ai pas trouvé le nom de la fonction appelée en cas d'impossibilité de résoudre la méthode.
Connectez-vous ou Inscrivez-vous pour répondre.
Réponses
http://www.objective-cocoa.org/forum/index.php?topic=1778.0
Trouvé dans un super forum!
:brule:
Il me semble qu'il devrait s'arrêter sur un "unrecognized selector" mais depuis le passage à XCode 3.0 j'ai des soucis avec les breakpoints. Pas vous?
Parce qu'il faut déjà qu'il trouve l'endroit du bug pour ça :P
Normalement oui, ça balance une exception...
Je m'étais même fait un petit .gdbinit qui va bien à la racine de mon répertoire user:
Et nada, Xcode ne s'arrête plus sur aucune exception même un simple objectAtIndex: hors limite avec un NSArray.
Je trouve l'astuce qui ajoute une catégorie à NSObject bien intéressante...
J'ai fait un petit programme pour essayer ça, avec un bouton qui actionne une simple méthode:
La première exception est bien attrapée (NSInvalidArgumentException).
Et le débogueur s'arrête bien sur
[NSException raise]
(depuis XCode 3, le débogueur marche plutôt mieux qu'avant chez moi).
Par contre, il faut voir la tronche de la pile d'appels:
Bref, je vais sans doute utiliser les catégories, à moins que vous ne connaissiez une meilleure méthode.
Mais j'avoue ne pas du tout savoir l'utiliser en ligne de commande, je m'y suis jamais plongé.
C'est plus facile qu'avec l'interfaçage :P
Lance le, et tapes "help", tu verras