Faltan nombres de símbolos al crear un perfil de la aplicación para iPhone con Instruments

Estoy comstackndo una aplicación para iPhone a través de la línea de comandos (por lo que no hay opciones de XCode) y no puedo mostrar los nombres de mis símbolos al crear perfiles con Instruments. He intentado varias banderas como -gdawrf-2 y -g sin ningún éxito. También he intentado usar dsymutils para generar un archivo .dSYM, pero no tengo ni idea de cómo se supone que debo usarlo para que también falle.

¡Cualquier ayuda será apreciada!

Cambié la configuración de mi proyecto para que no incluya el archivo dSYM durante la comstackción:

enter image description here

Cambiarlo para incluir el archivo dSYM ayudó al perfilador a desimbolizar los símbolos y solucionó mi problema:

enter image description here

Todavía tenía problemas con esto.

Mi problema era que podía ver el archivo dSYM que se generaba, pero Instruments no lo estaba recogiendo.

Para solucionar esto, haga lo siguiente:

  1. Ubique su archivo dSYM (debe estar en ~ / Library / Developer / DerivedData / APP_NAME-XXXXXXX / Build / Products / [BUILD_TYPE] – [DEVICE-TYPE] /
  2. Con los instrumentos detenidos, haga clic en Archivo -> Volver a simbolizar documento
  3. Desplácese hacia abajo hasta la entrada con el nombre de su aplicación
  4. Haga clic en “Buscar” y elija la carpeta del paso 1
  5. Haga clic en el botón Inicio para comenzar a perfilar

Cómo obtiene Instruments la información de depuración:

Los instrumentos obtienen información de depuración de un archivo .dSYM que normalmente se genera automáticamente mediante XCode al establecer el Formato de información de depuración en DWARF con el archivo dSYM combinado con una marca de verificación en el cuadro de opción Generar símbolos de depuración. Establecer estas opciones agregará un paso adicional al proceso de comstackción XCode y generará un archivo dSYM después de comstackr la aplicación. Cada dSYM está construido con un UUID que corresponde a un UUID en una sección Mach-O en el binario del que se deriva. Un importador de Spotlight indexa los UUID de cada archivo dSym que se encuentra en una ubicación accesible de Spotlight en su Mac. Por lo tanto, SPOTLIGHT hace toda la magia negra y es responsable de establecer el enlace entre la .app que está ejecutando y su correspondiente archivo .dSYM.

Cómo generar información de depuración y archivo dSYM sin XCode:

Asegúrate de estar comstackdo con -gdwarf-2 y -g flags. (Otras combinaciones de banderas podrían funcionar)

-g Produce información de depuración en el formato nativo del sistema operativo (stabs, COFF, XCOFF o DWARF 2). GDB puede trabajar con esta información de depuración. En la mayoría de los sistemas que usan el formato de stabs, -g permite el uso de información de depuración adicional que solo GDB puede usar; esta información adicional hace que la depuración funcione mejor en GDB, pero probablemente hará que otros depuradores se bloqueen o se nieguen a leer el progtwig. Si desea controlar con certeza si generar la información adicional, use -gstabs +, -gstabs, -gxcoff +, -gxcoff o -gvms (consulte a continuación). GCC le permite usar -g con -O. Los accesos directos realizados por código optimizado pueden ocasionalmente producir resultados sorprendentes: algunas variables que usted declara pueden no existir en absoluto; el flujo de control puede moverse brevemente donde no lo esperaba; algunas afirmaciones no se pueden ejecutar porque calculan resultados constantes o sus valores ya estaban disponibles; algunas sentencias pueden ejecutarse en diferentes lugares porque se movieron fuera de bucles.
Sin embargo, es posible depurar la salida optimizada. Esto hace que sea razonable usar el optimizador para progtwigs que puedan tener errores.

-gdwarf-2 Produce información de depuración en formato DWARF versión 2 (si es compatible). Este es el formato utilizado por DBX en IRIX 6. Con esta opción, GCC usa las características de DWARF versión 3 cuando son útiles; la versión 3 es compatible con la versión 2, pero aún puede causar problemas para los depuradores antiguos.

Genere un archivo dSYM usando dsymutil. Si la herramienta no se reconoce en la línea de comando, usa Spotlight para encontrarla. IMPORTANTE: Coloque el archivo .app en su mac HD antes de generar el dSYM si está trabajando en una unidad en red.

dsymutil MyApp.app/MyApp -o MyApp.app.dSYM

Coloque el archivo .dSYM en la unidad local del mac y ejecute Instruments como lo haría normalmente.

Restablecimiento de la indexación del reflector:

Si no se muestran los símbolos, podría ser porque spotligh está obstruido. Puede intentar restablecer la indexación de Spotlight agregando su carpeta que contiene el archivo dSYM (o incluso su unidad) a “Prevenir que Spotlight busque estas ubicaciones” en las preferencias de Spotlight y luego eliminarlo de inmediato.

En Xcode 4.5, puede elegir Perfil de Debug o Release comstackciones. Release se predetermina a pelar los símbolos cuando se copian en el dispositivo. Es muy fácil cambiar a la configuración de depuración para crear perfiles sin romper la configuración de lanzamiento. Para hacerlo, seleccione Producto -> Editar esquema en el menú XCode. Seleccione “Perfil” de la lista de esquemas que aparece, y luego seleccione la Configuración de comstackción correcta para eso.

O puede hacer una configuración de versión / perfil por separado y usarla en su sección Perfil de su esquema. La forma de agregar una configuración de comstackción separada se describe en la Guía del usuario de XCode .

Pasé tres días tratando de resolver esto para Xcode 7.1 / 7.3 …

Cambiar el destino de implementación a la última versión (9.3 en ese momento) me solucionó este problema. Mi empresa apunta a 7.0, así que probablemente tenga que crear un esquema personalizado para perfilar el código en Instruments para evitar tener que cambiar el objective (u olvidando cambiar el objective) cuando hagamos una versión de producción.

Parece que probablemente sea un error si los dSYM no funcionan en función del objective de despliegue.

Con Xcode 6 Instruments puede proporcionar el archivo dSYM de la siguiente manera:

  • Archivo -> Símbolos … menú (cuando se detiene el perfilado)
  • selecciona tu aplicación y presiona el botón Ubicar
  • seleccione la ruta que contiene dSYM (generalmente ~ / Library / Developer / DerivedData / APP_NAME-XXXXXXX / Build / Products / [BUILD_CONFIGURATION] – [TARGET_PLATFORM] / ). Consejo: Puede copiar esta ruta desde la terminal y usar el acceso directo OS X ⌘+SHIFT+G en el cuadro de diálogo.

Además, Instruments le preguntará si debería usar la ruta seleccionada para intentar cargar dSYM para esta aplicación en el futuro. Responda Sí 🙂

El problema es que Spotlight no puede encontrar los archivos .dSYM. Esto se debe a que Apple cambió la ubicación de la carpeta DerivedData. El DerivedData ahora entra en ~ / Library

Spotlight no indexará ~ / Library y, hasta donde he podido establecerlo, tampoco se puede indexar (por ejemplo, se ignora mdimport).

Un trabajo para obtener símbolos en su generador de perfiles, es simplemente copiar los datos fuera de ~ / Library, por ejemplo, su directorio de inicio funcionará bien.

Usé esta línea de comando:

 $ cp -r ~/Library/Developer/Xcode/DerivedData/AppName-xxxxxxxxxxx/Build/Products/Release-iphoneos/ ~/ 

Cuando mata su generador de perfiles y comienza una nueva ejecución de perfil, verá que los símbolos están disponibles nuevamente.

Verifique el registro de comstackción y asegúrese de que su -g está llegando al comstackdor. Es fácil equivocarse al cambiar las configuraciones en el proyecto y / o los niveles de destino para diferentes configuraciones de comstackción, etc.

Otra alternativa en la versión de Instruments que viene con Xcode 4 es utilizar el elemento de menú Volver a simular documento en el menú Archivo para Instrumentos. Este elemento de menú le permite usar los símbolos ubicados en el archivo .dSYM en el directorio ~ / Library / ….

Según mi experiencia, esto se debe a que se ha llamado a “Perfil” antes de que se haya instalado la última versión modificada de la aplicación en el dispositivo de destino.

Intente ejecutar la aplicación en el dispositivo / destino, y luego llame a “Perfil” nuevamente después de que se haya reinstalado.

Obtuve este problema porque el proyecto XCode estaba en una red compartida donde Spotlight no encontraría los archivos dSYM. Asegúrate de que esté en el disco local.

Creé una configuración de comstackción de “Perfil” para tratar este problema. Vea mi respuesta a una pregunta similar sobre Stackoverflow.

    Intereting Posts