27 votes

Comment puis-je regarder un objet dans Xcode du débogueur?

J'ai une simple question à propos de débogage sur Xcode et GDB.

J'ai souvent un message d'erreur:

unrecognized selector sent to instance 0x1081ad0

ce qui rend le chargement du programme dans GDB. Est-il un moyen facile d'examiner ce que l'instance se trouve dans la mémoire de GDB?

38voto

Steven Canfield Points 4277

po 0x1081ad0

po = Impression de l'Objet. Vous pouvez même appeler des méthodes, comme

po [myArray objectAtIndex:0]

Notez qu'il ne fonctionne que sur les objets, de sorte que

po 1

plantage de votre programme.

9voto

Quinn Taylor Points 29688

Steven est correcte - la commande gdb po est un raccourci pour print-object, ce qui en fait des appels -debugDescription (pas -description, comme vous vous en doutez) sur l'objet fourni en argument. Dans de nombreux cas, vous verrez le même résultat à partir des deux méthodes, puisque l'un appelle l'autre à moins remplacées. (Reportez-vous à la Remarque: légende sur cette Pomme note technique pour plus de détails. Notez que dans le code de l'échantillon, po $r3 imprime le contenu d'un PowerPC vous inscrire, mais vous pouvez utiliser n'importe quel objet pointeur/référence, y compris Intel registres, etc.)

Aussi, soyez conscient que print-object ne fonctionne que sur les objets qui n'ont pas été libéré. Il ne va pas aider du tout si vous essayez d'envoyer un message à un complètement foireuse pointeur. Compte tenu de l'erreur que vous avez cités, mais, il semblerait que c'est un objet valide de l'instance, il n'a tout simplement pas de mettre en œuvre la méthode que vous essayez d'appeler.

Il est également à distance possible que l'objet a déjà été détruit. Cette réponse devrait aider dans ce cas.


Edit:

Il existe d'autres moyens pour "examiner" les objets dans le débogueur. J'ai demandé ce DONC, la question à propos de Xcode de données de formateurs, ce qui est une façon vous pouvez déterminer la façon dont une classe personnalisée s'affiche dans la colonne Sommaire du débogueur. La documentation liée à partir de cette question, expliquer comment il fonctionne. J'ai trouvé le résumé de l'approche de beaucoup aider à voir l'état d'un objet.

6voto

EightyEight Points 1660

Il ya un couple de choses que vous pouvez faire.

  1. Vous pouvez insérer un point de rupture qui va déclencher à chaque fois que vous avez une exception, donc, fondamentalement, de créer un point de rupture pour cette (aller à des points d'arrêt et en créer un nouveau): -[NSException soulever]
  2. Alternativement, vous pouvez réellement voir ce que l'objet à l'mem emplacement est le suivant:

    info symbole 0x1081ad0 ou

    ligne info *0x1081ad0

Il n'y a plus d'info à la cocoadev entrée wiki pour exceptionhandling et le débogage des conseils pour objective C à cocoawithlove.

0voto

Votre exemple n'est pas valide. Vous avez la libération de l'objet quelque part d'autre, mais vous n'avez pas vider votre pointeur... permettre à Zombie de détection.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X