¿Cómo adjuntar el depurador a la aplicación iOS después del lanzamiento?

101

Tengo un problema que estoy solucionando y que ocurre con muy poca frecuencia y no parece suceder cuando tengo cosas que se ejecutan en Xcode.

¿Es posible ejecutar una aplicación normalmente (es decir, desde Springboard) hasta que ocurra mi problema y luego adjuntar un depurador en ese punto?

Preferiría hacer esto sin jailbreak si es posible.

Locksleyu
fuente

Respuestas:

124
  • Conecte su dispositivo conectado a su Mac
  • Depurar> Adjuntar al proceso por PID o nombre
  • En la hoja de diálogo, ingrese el nombre de su aplicación como aparece en el navegador de depuración cuando se inicia a través de Xcode.

Si la aplicación ya se está ejecutando, el depurador se adjuntará al proceso en ejecución. Si no se está ejecutando, esperará a que se inicie la aplicación y luego se adjuntará.

Ole Begemann
fuente
Ole, gracias por la respuesta. Estaba buscando una forma de hacer esto. Cuando voy a adjuntar el depurador, parece que se adjunta pero luego aparece este mensaje: advertencia: No se pueden leer los símbolos para / var / mobile / Applications / {GUID} / {APPNAME} .app / {APPNAME} (el archivo no encontró). Cuando presiono el botón "detener" en XCode, la aplicación termina. Parece que no encuentra los símbolos de depuración, aunque se está construyendo en modo de depuración. ¿Algunas ideas?
Brian
4
Tengo un problema con el Si no se está ejecutando, esperará a que se inicie la aplicación y luego se adjuntará. parte. No funciona. Utilizo el nombre del proceso para esperar a que la aplicación llame. Lanzo la aplicación en el iPhone, pero el depurador nunca se da cuenta de que la aplicación se ha iniciado.
Jonny
1
@BrianV: debe asegurarse de estar compilando con -ggdb si desea poder adjuntar al proceso.
itfische
4
Estoy de acuerdo con Jonny; mi experiencia es que el adjunto funciona en el simulador, pero no se conecta al dispositivo real.
James Moore
4
NOTA: En Xcode 5.0.1+ es Debug > Attach to Process > By Process Identifier (PID) or Name stackoverflow.com/a/20193088/175830
Jason Axelson
117

Dejaré esto aquí ya que ninguna de las otras 2 respuestas me dio suficientes detalles sin un poco de lucha.

  1. Ejecute su aplicación en el simulador y tome nota del nombre en el navegador de depuración ingrese la descripción de la imagen aquí

  2. Conecte su dispositivo y no olvide seleccionar su dispositivo como objetivo ingrese la descripción de la imagen aquí

  3. Depurar> Adjuntar al proceso> Por identificador de proceso (PID) o nombre ingrese la descripción de la imagen aquí
  4. Ingrese el nombre del paso 1 y adjúntelo. Eso debería ser todo lo que tienes que hacer. ingrese la descripción de la imagen aquí
Adam Johns
fuente
8
Deberías tener 1000 votos a favor. Depurar cosas que comienzan a través de un esquema de URL personalizado puede ser un fastidio sin este ingenioso truco. ¡Muchas gracias!
txulu
2
Ojalá hubiera visto esta respuesta antes de pasar 20 minutos averiguando esto por mi cuenta :(
simon_smiley
7
Esto funciona porque se adjunta al proceso, pero no veo que obtenga ningún resultado de registro, que es lo que realmente necesito. ¿Algunas ideas?
Orlando
2
@Orlando: si está buscando una salida de registro, le recomiendo DeviceConsole: github.com/rpetrich/deviceconsole
orion elenzil
1
Hice exactamente lo que sugieres. y me sale un error: Could not attach to PIDprobé tanto el nombre como su ID. Lo intenté mientras la aplicación se está ejecutando y mientras está detenida ..
Cariño
49

En Xcode 5.0.1 y 6 son los elementos de la barra de menú:

Debug > Attach to Process > By Process Identifier (PID) or Name...
PiTheNumber
fuente
7

En Xcode 7 es solo:

Debug > Attach to Process by PID or Name...
Japes
fuente