La traque du bug EXC_BAD_ACCESS

Une petite note mémo pour les développeurs d’appli sur iPhone.

La gestion de la mémoire et de sa libération est toujours un point sensible lorsqu’on développe et encore plus en langage objet. Il est donc fréquent de tomber sur des erreurs du type EXC_BAD-ACCESS lorsque le code essaye d’atteindre un objet (une partie de la mémoire) qui a été libéré(e).

Il y a un outil assez pratique pour identifier et localiser ces erreurs : il est possible de compiler le code d’une application en positionnant une variable lors de la compilation.

Petit mode d’emploi :

  1. dans XCode, déployer la partie “Executables” de l’appli et double cliquer sur le nom de l’appli “MonAppli”, une fenêtre “Executable MonAppli Info” s’ouvre,
  2. dans la partie “Variables to be set in the environnement” (partie basse de la fenêtre), cliquer sur le + pour ajouter la variable : NSZombieEnabled avec la valeur YES,
  3. compiler le code et exécuter avec le débugger.

Lorsque le debugger va rencontrer une erreur avec un mauvais accès mémoire, il va afficher dans la console un message du type : “[Class method:] : message sent to deallocated instance 0xaddress.

Là 2 solutions, soit, par l’intermédiaire de la console, on recherche ce qui correspond à cette adresse lors de l’exécution du code, plutôt fastidieux….., soit on positionne un breakpoint au niveau de la methode de la classe incriminée.

Pour positionner le breakpoint sur le méthode incriminée :

  1. dans xcode, déployer le menu breakpoint et cliquer sur “project breakpoint”,
  2. ajouter -[Class method:]
  3. relancer l’appli.

Au cours de l’exécution, dès que la méthode incriminée est appelée, le debugger stoppe sur le code appelant et hop, il n’y a plus qu’à réfléchir pour corriger !!!

ATTENTION : l’application compilée avec la variable d’environnement NSZombieEnabled est beaucoup plus volumineuse et gourmade en mémoire, il faut donc bien toujours penser à enlever cette variable d’environnement lors de la livraison de l’appli !

This entry was posted in iPhone, mac, tutoriels and tagged , , , , , . Bookmark the permalink.