Seguimiento de pila completa de Xcode

79

Si bien la depuración está ahí de todos modos para ver un seguimiento de pila completo, la lista de métodos llamados en el hilo principal. O cualquier forma de imprimirlos en la ventana de comandos.

NaXir
fuente
Programáticamente, puede usar callStackSymbols como describe Mihir. Pero, por supuesto, también puede detenerse en Xcode, en un punto de interrupción (o simplemente presionando "pausa") y examinar la pila en la columna de la izquierda. (Siempre habilite un punto de interrupción de excepción.)
Hot Licks
1
(+1 por darse cuenta de que examinar la pila es importante. Muy pocas personas que comienzan en Xcode aprecian esto).
Hot Licks
Estoy haciendo lo mismo, pero en el seguimiento de la pila puedo ver solo 5 o 6 llamadas a métodos y después de eso en 25 su UIApplicationMain y en 26 su principal. No puedo ver los métodos entre 6 y 25. Quiero ver el seguimiento completo de la pila.
NaXir
1
Lo obtuve a través de nslog. gracias chicos
NaXir

Respuestas:

81

Puede imprimir el seguimiento de la pila en NSLog mediante

NSLog(@"Stack trace : %@",[NSThread callStackSymbols]);

Tras un bloqueo, junto a la palabra (lldb), puede escribir:

po [NSThread callStackSymbols]

Editar:

Para una mejor salida en la consola en Swift, puede usar la siguiente línea en su lugar:

Thread.callStackSymbols.forEach{print($0)}
Mihir Mehta
fuente
11
dentro de lldb se puede imprimir con: po [NSThread callStackSymbols]
Max MacLeod
Actualizado la respuesta
Mihir Mehta
po devuelve Thread.callStackSymbolscannot use dot operator on a type
pho_pho
141

Utilice el btcomando en (lldb).

Una vez en pausa o después de un bloqueo, simplemente escriba bten la consola de depuración.
Imprimirá el seguimiento de la pila completa.

salida de muestra del comando bt

Alex Iceman
fuente
Excelente consejo para rastrear un problema de restricción después de establecer el punto de interrupción simbólico.
Alex Walczak
También puede mencionar la identificación del hilo (del panel de depuración) para capturar la pila de ese hilo en particular. Por ejemplo, en el caso de Thread 42, haría - "bt 42"
rivaldo4t
65

En Xcode 6, puede hacer clic en el botón en la esquina inferior izquierda del panel que muestra el seguimiento de la pila completa. Xcode 6 muestra el seguimiento de la pila completa

Gong Pengjun
fuente
Esta respuesta aún está vigente en Xcode 11, pero el botón se ha movido ligeramente. ;)
ReinstateMonica3167040
17

En Xcode 5, puede mover el control deslizante en la parte inferior del panel que muestra el seguimiento de la pila. Controla la cantidad de traza marcada que se muestra.

Control deslizante que controla el seguimiento de la pila

Sergey A. Novitsky
fuente
6
¿Cómo se hace esto en Xcode 6? Ya no hay control deslizante.
progrmr
3
Este control deslizante parece haber sido eliminado en XCode6 ... si alguien sabe cómo hacer esto bajo XCode6, usted sería mi héroe.
Steazy
@Steazy Vea la respuesta de Gong Pengjun para Xcode 6-11 (o posiblemente posterior, 11.x está vigente en este momento)
ReinstateMonica3167040
4

Puede agregar breakpointantes de que se lance la excepción. Primero vaya a Breakpoint Navigator(cmd + 6). En la esquina inferior izquierda, haga clic en el botón más. O puede usar Instruments(/ Developer / Applications / Instruments) para ayudar a detectar el uso de zombie objects. Referencia

Y cuando agregue la revisión del punto de interrupción, la imagen se creará Xcode.

ingrese la descripción de la imagen aquí

Puede expandir el seguimiento de la pila usando el control deslizante en la parte inferior step overy overpara los registros línea por línea.

gracias espero que esto te ayude

Buntylm
fuente