Voici une autre solution, moins élégante que la précédente, mais si vous n'avez pas ajouté de points d'arrêt ou de gestionnaires d'exception, c'est la seule solution possible.
Quand l'application se plante, et que vous obtenez vos données brutes premier lancer la pile d'appel (en chiffres hexagonaux), tapez dans la console Xcode info line *hex
(n'oubliez pas l'étoile et 0x
spécificateur hexagonal), par exemple :
(gdb) info line *0x2658
Line 15 of "path/to/file/main.m" starts at address 0x25f2 <main+50>
and ends at 0x267e <main+190>.
Si vous utilisez lldb vous pouvez taper image lookup -a hex
(sans étoile dans cette situation), et vous obtenez un résultat similaire.
Avec cette méthode, vous pouvez remonter du haut de la pile de lancement (il y aura environ 5 à 7 propagateurs d'exceptions système) jusqu'à la fonction qui a provoqué le crash, et déterminer le fichier et la ligne de code exacts.
De même, pour un effet similaire, vous pouvez utiliser l'utilitaire atos dans le terminal, tapez simplement :
atos -o path/to/AplicationBundle.app/Executable 0xAdress1 0xAdress2 0xAdress3 ...
et vous obtenez une trace de pile symbolisée (au moins pour les fonctions pour lesquelles vous avez des symboles de débogage). Cette méthode est plus préférable, car vous n'avez pas, pour chaque appel à l'adresse info line
il suffit de copier les adresses de la sortie de la console et de les coller dans le terminal.