Voici une autre solution, pas aussi élégante que la précédente, mais si vous n'avez pas ajouté de points d'arrêt ou de gestionnaires d'exception, cela ne peut être qu'une solution.
Lorsque l'application tombe en panne et que vous obtenez votre première pile d'appels bruts (en nombres hexadécimaux), tapez dans la console Xcode info line *hex
(n'oubliez pas les 0x
spécificateurs étoile et hexadécimal), 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 une sortie similaire.
Avec cette méthode, vous pouvez passer du haut de la pile de jet (il y aura environ 5 à 7 propagateurs d'exceptions système) jusqu'à votre fonction qui a causé un plantage, et déterminer le fichier exact et la ligne de code.
De plus, 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, vous avez des symboles de débogage). Cette méthode est plus préférable, car vous n'avez pas pour chaque appel d'adresse info line
, copiez simplement les adresses de la sortie de la console et collez-les dans le terminal.