Le débuggage d’une application sous xCode peut parfois s’avérer assez « bizarre ».
Je suis sûr qu’il vous est déjà arrivé d’être sûr d’avoir respecté les techniques de gestion de la mémoire en objective-c et pourtant votre application se termine avec un « EXC_BAD_ACCESS ».
En réalité, c’est souvent dû à un bout de code quelque part qui tente d’accéder à un objet qui a été « released »… Et évidemment, xCode n’est pas vraiment capable de nous dire qui ou quoi vu que l’objet a justement été libéré…
Il existe une astuce donc, c’est l’utilisation de NSZombies.
Pour faire simple, NSZombies permet de faire en sorte que lorsque vous libérez un objet, son emplacement mémoire et ses caractéristiques sont conservées dans un objet zombie, lequel sera pointé par le debugger en cas de problème (et donc pourra nous renseigner avec plus de détails).
Pour activer cette méthode dans xCode 3 dans votre projet, faites un clic-droit sur le nom de votre projet et choisissez « Get Info » :
Puis allez dans l’onglet « Arguments » et cliquez sur le bouton « + » pour ajouter une variable d’environnement NSZombieEnabled dont la valeur est YES :
Sous xCode4, faites Cmd-Alt-R et allez dans l’onglet Diagnostics puis cochez Enable Zombie Objects :
A partir de là, lorsque votre programme renverra un EXC_BAD_ACCESS, le compilateur sera capable d’avoir une trace de la ligne ayant provoqué l’erreur et de vous la montrer…
Attention : n’oubliez pas de vérifier que la gestion des zombies est bien désactivée dans votre projet en distribution…