Forcer XCode a s'arrêter sur une exception...
Mala
Membre, Modérateur
Si comme moi vous avez de temps en temps des exceptions générées par votre projet et que vous n'en connaissez pas l'origine exacte (ex: un objectAtIndex qui déborde dans l'un de vos 34234 NSArray... :fouf): ), c'est toujours irritant et on aimerait bien remonter rapidement à la source. :why?:
La plupart connaissent sans doute déjà l'astuce mais comme je l'ai pas aperçue dans le forum, je la balance.
A la racine du répertoire utilisateur, créez un fichier texte nommé ".gdbinit". Editez le pour y ajouter les lignes suivantes:
Quittez votre session puis relancez XCode. Ca y est c'est bon. Maintenant, lorsque vous aurez une exception inopinée, lancez votre appli en mode debug et dès que l'exception sera levée, XCode vous enverra à la source comme un grand.
Voilà , ça ne révolutionnera pas le monde mais ça peut faire gagner du temps.
NB: il est tout à fait possible d'ajouter le point d'arrêt -[NSException raise] directement dans XCode mais là l'avantage du fichier de config c'est que ce sera automatique pour tous les projets.
La plupart connaissent sans doute déjà l'astuce mais comme je l'ai pas aperçue dans le forum, je la balance.
A la racine du répertoire utilisateur, créez un fichier texte nommé ".gdbinit". Editez le pour y ajouter les lignes suivantes:
<br />fb -[NSException raise]<br />fb objc_exception_throw()<br />
Quittez votre session puis relancez XCode. Ca y est c'est bon. Maintenant, lorsque vous aurez une exception inopinée, lancez votre appli en mode debug et dès que l'exception sera levée, XCode vous enverra à la source comme un grand.
Voilà , ça ne révolutionnera pas le monde mais ça peut faire gagner du temps.
NB: il est tout à fait possible d'ajouter le point d'arrêt -[NSException raise] directement dans XCode mais là l'avantage du fichier de config c'est que ce sera automatique pour tous les projets.
Connectez-vous ou Inscrivez-vous pour répondre.
Réponses
Je comprends bien le "[NSException raise]"
Mais qu'est ce que l'argument "fb" ?
Pourquoi "objc_exception_throw" ?
Merci !
Tips From Big Nerd Ranch
mais ils n'en disent pas plus sur les options.
fb signifie "forward break" il me semble. Pour objc_exception_throw(), cette fonction doit permettre de lever une exception au niveau du code C pour les couches les plus basses.
Ca me paraà®trait logique...
Oui moi aussi. Histoire de le vérifier j'ai désactivé la première ligne hier. A ma grande surprise je viens de constater à l'instant que le débogueur ne s'arrête plus sur un "selector not recognized".
Il passe dans _NSRaiseError() qui doit gérer ça en C++ ou autre.