2009-11-14 4 views
0

Comme mes programmes implique de plus en plus de code Im commence à être un peu frustré par les messages d'erreur qui sont jetés dans la console:Comment interpréter certains des messages d'erreur de la console Xcode?

2009-11-14 14: 31: 57,513 FC [915: 5b27] *** - [SearchResultParser respondsToSelector]: message envoyé à l'instance désallouées 0x82d28e0

celui-ci est pas le pire car il me dit en fait qu'il doit faire avec un sélecteur et qu'il est originaire de SearchResultParser. Mais souvent, je reçois juste un "message envoyé à l'instance désaffectée 0x897867d6".

D'autres fois c'est le vidage de pile, où il me dit juste, ce que je pense est, les allocations de mémoire pour les objets actuellement dans la pile. Peut-être Im gâté, mais j'ai été utilisé à beaucoup plus d'informations à partir des messages d'erreur, en particulier de langues dynamiques: comme le numéro de ligne où l'erreur s'est produite, les noms d'instance des objets en question et ainsi de suite. Je lis sur l'utilisation d'instruments et il y a bien sûr des points de rupture. Il peut juste sembler un peu inutile de passer manuellement plus de 20 désallocations et 300 lignes de code pour savoir ce qui a causé un arrêt, quand la réponse est juste en face de vous: "0x82d28e0 a causé le crash"!

Dans une mauvaise façon, je me rappelle des messages d'erreur que je reçu de mon micro contrôleur IDE :)

est-il un moyen d'aller de l'adresse de l'instance par exemple 0x82d28e0 au nom de l'instance? Existe-t-il un moyen d'utiliser les informations de la console pour affiner l'emplacement du code dans le code? Surtout le "message envoyé à l'instance désaffectée" puisque je suis apparemment un peu impatient avec ma gestion de la mémoire :)

J'espère que quelqu'un là-bas peut m'aider à mieux comprendre la console :) Merci.

+0

Avez-vous vérifié la fenêtre du débogueur? Il vous montrera souvent la trace complète de la pile avec la ligne de code où l'erreur s'est produite. –

+0

Au début, j'étais un peu perplexe car le débogueur semblait être le code assembleur, puis j'ai essayé d'introduire des erreurs de publication et vous avez raison, je montre la ligne ou le bloc après l'erreur de publication dans mon propre code. C'est beaucoup plus près que je ne l'étais avant :) Merci MihaiD – RickiG

Répondre

4

Le problème avec cette erreur est qu'au moment où l'erreur se produit, l'instance désallouée n'est plus disponible et le débogueur n'a aucune information à ce sujet. Ce genre d'erreur n'arrive jamais dans les langues avec gestion automatique de la mémoire, donc vous ne pouvez pas vraiment les comparer à cet égard.

Regardez le paramètre NSZombieEnabled. Si vous activez les zombies, les objets sont convertis en zombies lorsque votre code veut les libérer. Ceux-ci peuvent plus tard vous donner plus d'informations sur eux-mêmes lorsque votre code tente de les relâcher une fois de plus.

+0

+1 pour recommander NSZombieEnabled - Bonne recommandation – Till

+0

Merci Ole :) Je suis allé vérifier et j'ai effectivement eu NSZombieEnabled = OUI. Je pense que j'ai lu quelque chose à ce sujet il y a quelques semaines et que je viens de définir cette valeur. Y a-t-il quelque chose de plus à faire? Je ne pouvais pas vraiment trouver autre chose que "NSZombies sont géniaux, mis à YES" là-bas. Merci encore :) – RickiG

Questions connexes