Obtenir de l'info au sujet de la mauvaise adresse de mémoire dans l'LLDB
Je suis en train de déboguer une EXC_BAD_ACCESS dans mon iPhone. Il est de s'écraser sur un appel de méthode et sur la ligne de la méthode est EXC_BAD_ACCESS (code=1, address = xxx)
.
Avant, j'aurais juste utilisé gdb info malloc-history <xxx>
pour démarrer le débogage, mais je vais avoir du mal à trouver un commandement parallèle dans LLDB
.
J'ai vu cette thread qui dit d'utiliser des Instruments, mais quand je le fais, j'ai toujours l'accident, mais je ne peux pas comprendre comment savoir exactement où l'application est de s'écraser dans les Instruments.
J'ai juste besoin de savoir où ce morceau de mémoire qui est en échec a été pointant vers. Quelle est la meilleure façon de le faire soit à l'aide de LLDB
ou des Instruments?
- Avez-vous essayé de le mettre en NSZombie sur? Qui permet dans de nombreux EXC_BAD_ACCESS cas!
- Oui je l'ai activé.
- Donc, vous obtenez crash de l'appareil ou simulateur? NSZombie ne fonctionne que sur simulateur.
- Je ne savais pas que. Ce qui explique pourquoi je n'ai vu aucune différence lorsque l'on travaille avec NSZombie. Merci!
Vous devez vous connecter pour publier un commentaire.
Ce problème est très facile à résoudre avec un informative trace. Malheureusement, avec la dernière version d'iOS et Xcode, une bonne pile de la piste est parfois difficile à trouver. Heureusement, vous pouvez définir une "Exception point d'arrêt" dans Xcode pour vous permettre d'examiner ce code avant la EXC_BAD_ACCESS exception.
Maintenant, vous devriez obtenir un backtrace immédiatement avant cette exception se produise. Cela devrait vous permettre d'au moins zéro dans les cas où cette exception est levée.
Vous pouvez voir la fonction malloc de la pile si vous débogage à l'aide d'instruments.
J'ai rencontré le même problème que vous, et de même voulu savoir comment obtenir le malloc de l'histoire lors de l'utilisation de lldb. Malheureusement je n'ai pas trouvé une chouette commande comme
malloc-history
trouvé dans gdb. Pour être honnête, j'ai juste changé mon débogueur, mais j'ai trouvé que gênant car j'ai senti que je ne devrais pas avoir à le faire.Pour trouver le malloc de l'histoire à l'aide d'instruments:
Il devrait être une simple question de l'affichage de la fonction malloc de l'histoire à ce point. Je noircis des parties qui a eu la classe /les noms de projet spécifique pour le travail que je fais, mais je pense que l'essence et l'utilité de la procédure à suivre pour obtenir cette information est présente.
Un Dernier Mot
Le problème que j'ai rencontré a donné un message du genre:
J'étais vraiment perplexe où cette
retain
était à venir, car le code de la il était en rupture sur de ne pas en avoir (pas dans le getter ou un setter de la ligne, c'est sur). Il s'avère que je n'étais pas à l'appel deremoveObserver:forKeyPath:
quand un objet a étédealloc
" ed. Plus tard dans l'exécution KVO ne s'est produite à un setter sur une ligne et qui a fait exploser le programme depuis KVO a été la tentative de notification d'un objet qui a déjà été publiées.vous pouvez utiliser la commande comme ceci dans lldb:
vous pouvez trouver plus de commandes à:LLDB DE COMMANDE GDB CARTE
CGImageRef
. C'était le truc!Est peut-être trop tard, mais pour obtenir de l'aide, sur LLDB:
E. g.