ios - descargar - Xcode 4.2 salta a main.m cada vez que se detiene el simulador
xcode descargar (11)
Esto es más bien una molestia general. Cada vez que detiene el simulador, Xcode salta a main.m por algún motivo. En el navegador izquierdo, salta al Debug Navigator.
¿Hay alguna manera de arreglar esto?
Es molesto porque podría estar probando una cierta línea de código, y ahora cada vez, necesito hacer un par de clics solo para volver a ese código.
Este problema no es nuevo, aunque parece empeorar. En el momento de escribir esto, estaba en la semilla de GM, pero este problema persiste en XCode 4.2 final. Esto no fue un problema en versiones anteriores de XCode.
Creo que es justo llamarlo un error, Xcode 3 suprimió específicamente este artefacto inútil.
He tenido éxito (cuatro veces y contando) con este delineador en ~/.gdbinit
:
handle SIGKILL nostop noprint nopass
Tomado de este manual de gdb:
http://www.delorie.com/gnu/docs/gdb/gdb_39.html
No estoy seguro de si se aplica a lldb también.
Cuando comenzamos a depurar desde xcode, el depurador se configura para monitorear las señales del sistema operativo. Cuando presionamos el botón de detener en XCode (o presionamos cmd + R - que primero detiene la ejecución de la instancia existente y luego intentamos iniciar uno nuevo, de alguna manera igual a presionar manualmente detener primero y luego ejecutar) SIGKILL se envía al depurador .
Cuando la causa de la interrupción proviene de fuera de la aplicación (es decir, todos los casos en que se envía SIGKILL, como botón de parada presiona), el depurador salta a main
, ya que main es la raíz de la aplicación y el lugar donde la aplicación se encuentra con el sistema operativo . El depurador no tiene forma de identificar por qué se emite este SIGKILL (presionando el botón de detener en xcode / presionar cmd + R / eliminar aplicación de la barra multitarea, etc.), pero trata a SIGKILL como interrupción externa y nada relacionado con su código . Entonces salta a main.
Si la causa de la interrupción es desde el interior de la aplicación (como falla de la aplicación / SIGABRT), el depurador lo maneja y salta al lugar del bloqueo, que normalmente vemos.
No lo considero un error xcode, sino una forma normal de manejar SIGKILL. Pero si quieres mantenerte en tu código y no quieres saltar a main, puedes hacer dos cosas
Puedes hacer lo que Gabe sugirió. Como dijo BBonified, es como un asistente de banda, pero creo que debería funcionar (personalmente, nunca lo intenté)
Informe un error / solicitud de una función here . Déjame decirte que no eres el primero en hacerlo. Ya se ha informado un error. Mira this y this . Pero no tengo mucha esperanza de una acción positiva de Apple
Y estoy de acuerdo contigo, a veces es molesto. Especialmente si ha experimentado de manera diferente en las versiones anteriores de XCode. Pero solo podemos tomar lo que dan aquí.
Estaba tratando de encontrar la línea ofensiva cuando mi código se estaba rompiendo, entonces lo que hice fue:
- Vaya a donde defina sus puntos de interrupción (navegador de punto de interrupción, según la documentación)
- Haga clic en el signo "+" en la esquina inferior izquierda del área de navegación
- Haga clic en Agregar punto de corte de excepción
- Haga clic en Listo
- Ejecuta tu aplicación
Xcode te muestra la línea ofensiva.
Esto podría no ser mucho. Pude evitar este problema el 99% del tiempo esperando aproximadamente 2 segundos después de detener la aplicación, antes de volver a iniciarlo.
ACTUALIZACIÓN : Después de actualizar a la última versión de Xcode, se me solicita usar LLDB en lugar de GDB. El problema parece haberse ido ahora.
Intenté lo que sugirió David, pero eso no funcionó para mí, así que intenté algo similar:
- Abra Preferencias, seleccione la pestaña Comportamientos.
- Seleccione "Ejecutar salidas inesperadamente" desde la columna izquierda.
- Seleccione "Mostrar depurador con vistas actuales".
Estoy usando Xcode versión 4.2 build 4D199.
EDITAR : Eso funcionó durante unos 15 minutos. Luego volvió a mostrar main.m en el editor nuevamente.
Ninguna de estas soluciones funcionó para mí y considero que el comportamiento es demasiado intrusivo como para aguantarlo.
Lo soluciono usando el ''Editor asistente'' en lugar del editor como mi principal ventana de edición. Accedes al Editor Asistente usando el pequeño botón de pajarita en la parte superior derecha de la ventana individual.
Puede configurarlo en ''Manual''. Haga clic en el botón que es la miga más a la izquierda de la ruta de navegación en la parte superior del marco del Asistente de edición y seleccione Manual en el menú emergente que aparece. La configuración Manual le permite seleccionar el archivo que está editando haciendo clic en la segunda y última migaja del rastro de navegación y seleccionando el archivo de la ventana emergente que aparece.
Entonces, simplemente minimizo el tamaño del editor principal, o lo uso como una ventana de edición secundaria, útil dado que ya no puede dividir los editores en múltiples marcos. Lejos de lo ideal, pero ese es XCode 4 para ti.
Ninguna de las otras soluciones enumeradas era adecuada para mí, así que hice una macro (usando una utilidad externa de teclas rápidas).
(espere 0.1 segundo después de cada paso)
período de comando
comando-1
flecha hacia abajo
flecha arriba
comando-j
entrar
Utiliza esta tecla en lugar de la parada normal, y terminas con el cursor en el lugar donde lo dejaste. Muy agradable.
Ninguno de los ajustes de preferencia parece funcionar para mí.
He podido rastrear la secuencia ofensiva de eventos. El mensaje de error SIGKILL aparecerá cuando ejecute su aplicación y use varios hilos. Por ejemplo, cuando utilizo UIWebView en mi aplicación, abortará en main.m. Comprobé que cuando no se llama a UIWebView, XCode se puede detener sin que el mensaje de error SIGKILL devuelva al usuario a main.m
Parece que hay al menos dos subprocesos que se inician al inicializar un UIWebView. Sin embargo, cualquier subproceso creado por usted durante la ejecución de su aplicación hará que SIGKILL notifique incorrectamente a XCODE para que regrese al principal.
Puedes ver esto en el GDB que hay un interruptor justo antes de SIGKILL:
[Cambiando al proceso 24957 hilo 0x2103]
[Cambiando a proceso 24957 hilo 0x7403]
[Cambiando a proceso 24957 hilo 0x207]
El programa terminó con el código de salida: 0
Definitivamente sigue siendo un error con XCODE que con suerte se solucionará.
Por ahora, si evita ejecutar el código que lanza un hilo separado, no cambiará la vista a main.m Para el código que lanza hilos adicionales, recomendaría salir del simulador para regresar al modo de edición en XCODE.
Tuve el mismo problema y fue realmente molesto, especialmente cuando estaba en medio de la depuración, detención / lanzamiento de la aplicación varias veces seguidas después de pequeñas modificaciones.
Todo se puede resolver a través de la configuración en las preferencias de usuario de Xcode:
- Solo ve a "ejecutar completa"
- Allí encontrará la línea "Mostrar" y haga clic en la casilla de verificación
- En la misma línea, modifique el objetivo para ir a "Actual" en el menú desplegable.
Ahí tienes. Xcode no moverá su vista de edición a partir de ahora. Disfrutar.
PD: Xcode versión 4.2 Build 4C199
Ve a Preferencias -> Comportamientos. Elija "Ejecutar completa" en el lado izquierdo. Marca la casilla junto a "Mostrar pestaña" e ingresa un nombre de pestaña. Yo uso "Editar". De esta forma cada vez que te detengas, siempre estarás de vuelta en una pestaña llamada Editar.
Xcode -> Preferencias
En Comportamientos
Haga clic en Ejecutar comienza
Casilla de verificación para depurador [Mostrar] con [Vistas actuales]
...trabajó para mi.