2010-05-26 4 views
3

Je reçois cette erreur étrange dans gdb et je suis incapable de tracer la ligne de code exacte pour tracer le bug. Est-ce que quelqu'un connaît ce type de bug? Voici ce que je reçois dans gdberreur GDB étrange impossible de tracer

*** -[CALayer sublayers]: message sent to deallocated instance 0x911c2a0 
(gdb) po 0x911c2a0 
Program received signal SIGTRAP, Trace/breakpoint trap. 
0x020993a7 in ___forwarding___() 
The program being debugged was signaled while in a function called from GDB. 
GDB has restored the context to what it was before the call. 
To change this behavior use "set unwindonsignal off" 
Evaluation of the expression containing the function (_NSPrintForDebugger) will be abandoned. 
(gdb) info symbol 0x911c2a0 
No symbol matches 0x911c2a0. 
(gdb) 

Répondre

0

J'ai la solution au problème. Le problème était dû à un contrôleur de vue. Le contrôleur de vue a été libéré, puis après l'appel de la méthode. Mais étrange gdb n'a rien montré à propos de viewController relese .... Ni l'activation de NSZombie n'a aidé.

0

Vous avez évidemment un bug de gestion de la mémoire.

Et vous ne tracez pas la ligne exacte du tout. Pour obtenir une trace de pile, tapez bt ou regardez simplement dans la fenêtre Débogueur (Exécuter → Débogueur).

(po signifie "Imprimer objet Objective-C" Depuis ce cas particulier a été désallouée, po -ing fera autre erreur..)

0

Essayez le débogage avec NSZombieEnabled ensemble YES environnement exécutable:

pour activer l'installation NSZombieEnabled dans votre application:

Choisissez projet> Modifier actif Executable pour ouvrir le fichier exécutable Fenêtre Info . Cliquez sur Arguments. Cliquez sur le bouton Ajouter (+) dans la section "Variables à définir dans l'environnement". Entrez NSZombieEnabled dans la colonne Nom et YES dans la colonne Valeur. Assurez-vous que que la coche de l'entrée NSZombieEnabled est sélectionnée.

Vous pouvez également ajouter quelques points d'arrêt pour vous aider à déboguer:

fb -[_NSZombie init] 
fb -[_NSZombie retainCount] 
fb -[_NSZombie retain] 
fb -[_NSZombie release] 
fb -[_NSZombie autorelease] 
fb -[_NSZombie methodSignatureForSelector:] 
fb -[_NSZombie respondsToSelector:] 
fb -[_NSZombie forwardInvocation:] 
fb -[_NSZombie class] 
fb -[_NSZombie dealloc] 
+0

J'ai déjà ajouté NSZombieEnabled dans les variables d'environnement et l'ai défini sur YES. Où puis-je ajouter ces points d'arrêt? fb - [_ NSZombie init] fb - [_ NSZombie retainCount] –

+0

Ce sont des points d'arrêt futurs (points d'arrêt du code qui n'est pas encore chargé). Vous pouvez les ajouter à ~/.gdbinit. Voir http://nslog.de/posts/46 pour une liste de toutes les choses que je recommande de mettre là-dedans. – stigi

2

Vous pouvez essayer ce qui suit afin de voir où le CALayer défectueux a été attribué:

(gdb) info malloc 0x911c2a0 

Je ne sais pas si gdb joue bien avec des objets de zombies, mais évidemment, il semble qu'il a quelques limitations.

+0

informations utiles! Merci – windson