web-dev-qa-db-fra.com

Comment rechercher la cause de SIGABRT

Je montre le code de ce problème à des fins d'exemple, mais vraiment ma question est: comment suis-je censé localiser et comprendre les erreurs SIGABRT? J'ai lu cette question: sigabrt sans message d'erreur , mais je ne pense pas que cela se rapporte à mon problème.

L'exemple que je vais montrer ci-dessous n'est évidemment pas un problème xib, et les temps passés à obtenir SIGABRT semblaient plus à voir avec des exceptions non gérées. J'ai essayé d'utiliser le bt de GDB mais cela n'aide pas. N'y a-t-il pas un vidage plus complet à voir? J'ai également utilisé NSZombie, mais je ne comprends vraiment pas comment l'utiliser, donc si c'est votre réponse, veuillez fournir un lien vers la documentation sur la façon dont je suis censé obtenir des données pertinentes.

Voici mon exemple: j'essaie d'utiliser Core Data. Mon projet n'a pas été configuré à l'origine avec lui, j'ai donc dû l'ajouter manuellement, ce que j'ai fait en allant dans mon projet> Phases de construction> Lier le binaire aux bibliothèques> en cliquant sur le plus et en ajoutant CoreData.framework

J'ai ensuite créé mon modèle de données en allant dans Fichier> Nouveau> Modèle de données. J'ai créé pas mal d'attributs et c'est tout

Après cela, j'ai ajouté les méthodes appropriées au délégué de l'application (je l'ai fait en créant un nouveau projet avec Core Data, puis en copiant les méthodes):

//code removed, as its not needed for the question/answer

Après cela, j'ai juste essayé d'enregistrer une valeur dans l'objet géré (encore une fois, le code copié de l'implémentation par défaut avec un nouveau projet):

//code removed, as its not needed for the question/answer

Mais tout ce que j'obtiens lorsque j'exécute la méthode addTime est l'erreur SIGABRT.

xcode error

41
owen gerig

SIGABRT augmente lorsqu'un objet reçoit un message non implémenté. Combien d'avertissements votre application contient-elle? Essayez de les parcourir et trouvez ceux qui vous avertissent "un objet peut ne pas répondre à un sélecteur", si vous nettoyez votre application de tout cela, vous la ferez probablement fonctionner correctement.

EDIT: Répondez aux commentaires ci-dessous qui sont très utiles:

ok, voilà l'artillerie lourde - avez-vous essayé d'utiliser des points d'arrêt? Ouvrez le sixième onglet dans votre explorateur de projet, dans le coin inférieur gauche, appuyez sur + -> Ajouter un point d'arrêt d'exception -> Terminé. Cela ajoutera un gestionnaire d'exceptions qui arrêtera votre application lors de l'appel même de la méthode qui plante l'application.

EDIT: À partir de xCode 5.0> Vous n'avez plus besoin de spécifier quelle exception votre point d'arrêt va intercepter pendant la création du point d'arrêt. Vous avez juste besoin d'appuyer sur + -> Ajouter un point d'arrêt d'exception et vous êtes bon.

enter image description here

72
Eugene