iOS Déboguer EXC_BAD_ACCESS


Exemple

EXC_BAD_ACCESS signifie que le processus a tenté d'accéder à la mémoire de manière non valide, par exemple en déréférençant un pointeur NULL ou en écrivant dans une mémoire en lecture seule. C'est le type de crash le plus difficile à déboguer, car il ne contient généralement pas de message d'erreur, et certains plantages peuvent être très difficiles à reproduire et / ou se produire dans un code sans rapport avec le problème. Cette erreur est très rare dans Swift, mais si cela se produit, vous pouvez souvent obtenir des blocages plus faciles à déboguer en réduisant les optimisations du compilateur.

La plupart des erreurs EXC_BAD_ACCESS sont provoquées en essayant de déréférencer un pointeur NULL . Si tel est le cas, l'adresse indiquée dans la flèche rouge sera généralement un nombre hexadécimal inférieur à une adresse mémoire normale, souvent 0x0 . Définissez des points d'arrêt dans le débogueur ou ajoutez des instructions printf / NSLog occasionnelles pour savoir pourquoi ce pointeur est NULL .

Un EXC_BAD_ACCESS qui se produit de manière moins fiable ou qui n'a aucun sens pourrait résulter d'un problème de gestion de la mémoire. Les problèmes courants qui peuvent causer ceci sont:

  • Utiliser de la mémoire qui a été désallouée
  • Essayer d'écrire après la fin d'un tableau C ou d'un autre type de tampon
  • Utiliser un pointeur non initialisé

Dans la section Diagnostics de l'éditeur de schéma, Xcode inclut quelques outils utiles pour résoudre les problèmes de mémoire:

entrer la description de l'image ici

Le programme Sanitizer d'adresses ajoute de nombreuses vérifications qui arrêteront l'application chaque fois que des problèmes de mémoire surviennent et fournissent un message d'erreur utile détaillant exactement ce qui s'est passé. Zombie Objects détecte les problèmes liés aux objets Objective-C libérés, mais vous ne devriez pas rencontrer ce type de problèmes avec le comptage automatique des références activé.