2009-09-02 6 views
6

El sujeto lo dice todo realmente ... ¿Hay algún buen tutorial para Xcode's Debugger? Estoy encontrando dribs y muchas cosas, pero nada exhaustivo o que sea lo suficientemente profundo. Mi problema ahora es que esta ...¿Dónde hay un buen tutorial sobre cómo usar el depurador de Xcode correctamente?

#0 0x90d9c688 in objc_msgSend 
#1 0x30506515 in NSPopAutoreleasePool 
#2 0x30901697 in _UIApplicationHandleEvent 
#3 0x32046375 in PurpleEventCallback 
#4 0x30245560 in CFRunLoopRunSpecific 
#5 0x30244628 in CFRunLoopRunInMode 
#6 0x308f930d in -[UIApplication _run] 
#7 0x309021ee in UIApplicationMain 
#8 0x00001ff8 in main at main.m:14 

... combinada con esto ...

0x90d9c688 <+0024> mov 0x20(%edx),%edi 

... y esto ...

EXC_BAD_ACCESS 

.. .no está ayudando mucho. O en absoluto, realmente. Estoy recurriendo a comentar líneas de código y tiene que haber una mejor manera.

Gracias

ACTUALIZACIÓN: supongo que tal vez mi ventilación era un poco de una distracción de la verdadera cuestión, aunque los consejos han ayudado a explicar las cosas un poco. Lo que estoy consiguiendo realmente es no solo una explicación de lo anterior, sino solo el uso del depurador en general. Las preguntas que generalmente tengo son:

  • ¿Por qué el depurador a veces pasa de la vista de código fuente al código de ensamblado (lo que asumo) cuando paso sobre o dentro? ¿Hay alguna manera de ver ambos al mismo tiempo todo el tiempo?
  • ¿Hay algo específico que debería estar buscando en el código de ensamblaje, o cualquier cosa que pueda ayudar en una situación dada?
  • Parece que los puntos de interrupción permiten acciones, por lo que tengo curiosidad de cómo se podría utilizar en lugar de llenar mi código con declaraciones NSLog.

Sé que estos son amplios, y probablemente deberían pedirse individualmente, pero no quería saturar el espacio SO con estos temas que ya podrían estar documentados en otra parte.

También he notado que hay una pregunta casi duplicado pedido aquí: What are some Objective-c debugging tips?

+0

Sé que esta es una vieja pregunta. Pero para cualquiera que tropiece con esto, encontré [este tutorial de Ray Wenderlich] (http://www.raywenderlich.com/10209/my-app-crashed-now-what-part-1) absolutamente excelente. –

Respuesta

2

El accidente es el interior el código de Apple (por eso depurador no la fuente sí muestra) y la causa de que es en realidad en otro lugar - te' he liberado un objeto temporal que se suponía iba a ser liberado por el grupo de autorrelease. Esto causó que el grupo de liberación automática se bloquee.

Se supone que sólo liberar objetos que:

  • usted ha retenido por sí mismo utilizando retain
  • fueron devueltos por sólo init, copy y new métodos (y sus variantes que contienen estas palabras)

Desafortunadamente no se puede aprender ese del depurador, solo de la documentación y la experiencia ...

Puede usar Clang Analyzer para encontrar dichos errores (a veces).

+0

Si pudiera verificar ambas respuestas como la aceptada, lo haría, a pesar de que no contestaron la pregunta de la manera que esperaba. No es que realmente importe aquí, al final. Por lo tanto, voy con la que primero me lleve a la causa del colapso, aunque creo que tengo que repasar las reglas de administración de memoria nuevamente para entender por qué estoy sufriendo el colapso. ¡Gracias a ambos! –

2

Aquí hay una great tutorial sobre las características del depurador de Xcode 4.

En relación con su pregunta fo r por qué el depurador pasa de la vista de código fuente a la vista de ensamblaje ... Va a la vista de conjunto cuando la ejecución del código entra en clases que no forman parte de los archivos de código fuente ... p. ej. cuando ingresas al código que forma parte de Frameworks que usas como UIKit.

Cuestiones relacionadas