Aquí hay una solución más, no tan elegante como la anterior, pero si no agregó puntos de interrupción o controladores de excepción, puede ser solo un camino a seguir.
Cuando la aplicación se bloquea y obtiene su pila de llamadas de primer lanzamiento sin procesar (en números hexadecimales), escriba en la consola Xcode info line *hex
(no olvide el 0x
especificador de estrella y hexadecimal), por ejemplo:
(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 está utilizando lldb , puede escribirimage lookup -a hex
(sin en esta situación) y obtendrá un resultado similar.
Con este método, puede atravesar desde la parte superior de la pila de lanzamiento (habrá aproximadamente 5-7 propagadores de excepción del sistema) a su función que causó un bloqueo, y determinar el archivo y la línea de código exactos.
Además, para un efecto similar, puede usar la utilidad atos en la terminal, simplemente escriba:
atos -o path/to/AplicationBundle.app/Executable 0xAdress1 0xAdress2 0xAdress3 ...
y obtiene un seguimiento de pila simbolizado (al menos para las funciones que tiene símbolos de depuración). Este método es más preferible, ya que no tiene para cada llamada de dirección info line
, simplemente copie las direcciones de la salida de la consola y péguelas en la terminal.