2012-03-01 13 views
11

Estoy trabajando en mi aplicación de iPad,¿Cómo imprimir o ver el método call stack en xcode?

Mientras se ejecuta el código, hay un método en la vista de tabla.

como sabemos

`cellForRowAtIndexPath:` 

Existen varias veces este método puede ser invocado.

como mientras

scrolling table view cells. 

Or table view reload data. 

tengo codificación compleja por lo que sólo quiero ver pila de llamadas ...

Que de qué método se llama celda para la fila en la ruta del índice.

He usado NSLogs y puntos de interrupción pero todavía no he podido conseguir.

+3

http://stackoverflow.com/questions/220159/how-do-you-print -out-a-stack-trace-to-the-console-log-in-cocoa – ivanzoid

+0

Lo que quieres, ¿quieres lo que quieras cada vez? cellfor row en index every time o not –

+0

Mira esto: http://stackoverflow.com/questions/8891382/print-callstack-at-runtime-xcode – Nilesh

Respuesta

15

Al llegar a un punto de ruptura, seleccione el navegador de depuración en el área de navegador (parte izquierda de la ventana):

debug navigator

El navegador de depuración que muestra una traza de la pila para cada hebra de la aplicación Muestra esencialmente la misma información que obtienes del comando backtrace de gdb, pero omite las direcciones de devolución (que normalmente no son muy útiles). Use los controles en la parte inferior del navegador para ocultar o mostrar todos los hilos y para cambiar el ajuste de la cantidad de cuadros de pila que se muestran.Tengo el control deslizante en el medio de su rango en la imagen de arriba, y el navegador de depuración está omitiendo los cuadros de pila 2-18, que son todas las llamadas de un método de marco a otro, es decir, no de mi parte.

Xcode 4 debe configurarse para mostrar el navegador de depuración automáticamente cuando está depurando, pero si no puede configurarlo, vaya a Xcode-> Behaviors-> Edit Behaviors .... Luego seleccione Ejecute el elemento Pausa de la lista y configúrelo en Mostrar navegador Debug Navigator.

+2

+1 para la imagen. (10char) – phlebotinum

+0

Seguramente +1 por imagen. –

+0

¿Cómo veo los marcos de pila omitidos 2-18? ¿Por qué los omite? – jameshfisher

9

Puede establecer un punto de interrupción (o una aplicación de pausa) y desde gdb debugger write "backtrace".

Debería ver pila:

(gdb) backtrace 
#0 0x9022f7fe in mach_msg_trap() 
#1 0x9022ecdc in mach_msg() 
#2 0x022a310a in __CFRunLoopServiceMachPort() 
#3 0x02206550 in __CFRunLoopRun() 
#4 0x02205d84 in CFRunLoopRunSpecific() 
#5 0x02205c9b in CFRunLoopRunInMode() 
#6 0x024617d8 in GSEventRunModal() 
#7 0x0246188a in GSEventRun() 
#8 0x00c0ca16 in UIApplicationMain() 
#9 0x0000270d in main (argc=1, argv=0xbfeff550) at /Users/.........m:14 
+12

'bt' es un atajo útil para' backtrace'. – Caleb

+4

'bt' también funciona con LLDB :) –

7

Pruebe a establecer un punto de interrupción en la entrada para

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath

A continuación, haga clic en el punto de interrupción y seleccionar "Iniciar Seguimiento de la pila y la continuación automática" de el elemento de menú "Puntos de interrupción incorporados".

Esto registrará automáticamente el seguimiento de la pila cada vez que se ingrese esta función y continuará sin tener que usar la consola gdb.

Eso fue para Xcode 3.x Para Xcode 4 el procedimiento es un poco diferente.

  1. Configure su punto de interrupción.
  2. Haga clic con el botón derecho en el punto de interrupción y seleccione "Editar Punto de interrupción". (O Command - Option Haga clic en el punto de interrupción)
  3. Seleccione "Comando del depurador" desde la ventana emergente "Acción".
  4. Establezca el mensaje en "bt" (Sin las comillas)
  5. En "Opciones", asegúrese de marcar "Continuar automáticamente después de la evaluación".
+0

muchas gracias lo veremos ... –

+1

+1 para la diferencia de v3 y v4. – phlebotinum

16

Puede imprimir el seguimiento de la pila en el NSLog por

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

EDIT: Código Swift

println("Stack trace: %@", NSThread.callStackSymbols()) 
Cuestiones relacionadas