2010-05-05 5 views
52

Estoy compilando 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.Faltan nombres de símbolos al crear un perfil de la aplicación para iPhone con Instruments

¡Cualquier ayuda será muy apreciada!

Respuesta

34

Cómo Los instrumentos obtienen información de depuración:

Los instrumentos obtienen información de depuración de un archivo .dSYM que normalmente genera 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 compilación XCode y generará un archivo dSYM después de compilar 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úrese de que está compilig con banderas -gdwarf-2 y -g. (Otras combinaciones de indicadores podrían funcionar)

-g información de depuración Produce en formato nativo ( puñaladas, COFF, XCOFF o ENANO 2) del sistema operativo. 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 de funcione mejor en GDB, pero probablemente hará que otros depuradores fallan o se niegan a leer el programa. Si desea controlar con certeza si genera la información adicional, use -stabs +, -gstabs, -gxcoff +, -gxcoff o -gvms (consulte a continuación). GCC le permite usar -g con -O. Los accesos directos tomados por código optimizado pueden ocasionalmente producir sorprendentes resultados : algunas variables que haya declarado pueden no existir en absoluto; flujo de control puede moverse brevemente donde no lo hizo esperarlo; algunas sentencias pueden no ser ejecutadas porque calculan resultados constantes o sus valores eran ya disponibles; algunas sentencias pueden ejecutar 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 programas que puedan tener errores.

-gdwarf-2 Produce la 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; versión 3 es compatible con versión 2, pero aún puede causar problemas para depuradores anteriores.

generar un archivo usando dSYM 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 ejecutar instrumentos como lo haría normalmente.

indexación de Spotlight Resettig:

Si no se muestran los símbolos, puede ser debido a spotligh hay micrófonos. 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.

+2

Gracias. Anteriormente excluí mi carpeta Xcode DerivedData del índice de Spotlight para ayudar a Spotlight a encontrar el .dsym correcto para simbolizar los registros de bloqueo. Eliminar eso hizo el truco. – joerick

+0

Aunque puede requerir que Finder sea capaz de mostrar las carpetas ocultas, y necesite usar arrastrar y soltar para poder agregar temporalmente la carpeta a la lista de carpetas sin indexar, me funcionó bien después de eliminarla, para indexarla de nuevo – petershine

+0

Esto nos sucedió porque cambiamos el Formato de información de depuración de "DWARF con archivo dSYM" a "DWARF" por motivos de rendimiento. Tenemos el formato establecido en "DWARF con archivo dSYM" en otro esquema. Entonces solo tenemos que cambiar los esquemas cada vez que queremos crear un perfil. –

1

Compruebe el registro de generación y asegúrese de que el interruptor de -g está llegando al compilador - es fácil de conseguir este mal al cambiar los ajustes en el proyecto y/o niveles objetivo para las diferentes configuraciones de construcción etc.

+0

La bandera está allí, cuadruplicado comprobado. –

0

Recibí 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.

2

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 va en ~/Library

Spotlight no indexará ~/Library y por lo que he podido establecer, no se pueden hacer para indexarlo cualquiera (por ejemplo mdimport se ignora).

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

que utilizan esta línea de comandos:

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

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

1

Otra alternativa en la versión de Instruments que viene con Xcode 4 es utilizar el elemento de menú Re-Symbolicate Document 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/....

56

Todavía tenía problemas con esto.

Mi problema fue que pude ver el archivo dSYM que se estaba generando, pero Instruments no lo estaba recogiendo.

Para solucionar este problema, haga lo siguiente:

  1. Busque el archivo dSYM (debe estar en ~/Library/desarrollador/DerivedData/APP_NAME-XXXXXXX/Construcción/Productos/[BUILD_TYPE] - [DISPOSITIVO DE TIPO ]/
  2. con los instrumentos del detenido, haga clic en archivo -> Re-Symbolicate Documento
  3. Vaya a la entrada con su nombre de la aplicación
  4. Haga clic en "Localizar" y seleccione la carpeta desde el paso 1
  5. Haga clic en Inicio botón para comenzar perfil ing
+0

Me gusta esta solución ya que no depende de que Spotlight funcione. También fue el único que resolvió este problema para mí. ¡Gracias! –

+0

Pero ahora tengo que hacer esto repetidamente, con cada ejecución. ¿Alguna forma de hacer que se pegue? – OldPeculier

+17

No aparece el nombre de mi aplicación en esta lista ... – k06a

14

En Xcode 4.5 puede elegir el perfil de versiones de Debug o Release. 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 compilación correcta para eso.

O puede hacer una configuración de lanzamiento/perfil por separado y usarla en su sección Perfil de su esquema. Cómo agregar una configuración de compilación separada se describe en el XCode User Guide.

+0

Además, si está creando perfiles, definitivamente verifique el esquema de "Perfil" que le ha asignado una configuración de compilación que genera símbolos de depuración como ¡Depurar! (era mi problema) – k3a

0

Creé una configuración de compilación "Perfil" para solucionar este problema. Ver my answer a una pregunta similar Stackoverflow.

3

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

  • Archivo -> Símbolos ... menú (cuando se para establecer perfiles)
  • seleccione su aplicación y pulse Buscar botón
  • seleccionar la ruta que contiene dSYM (generalmente ~/Library/Developer/DerivedData/APP_NAME-XXXXXXX/Build/Products/[BUI LD_CONFIGURATION] - [TARGET_PLATFORM]/). Consejo: Puede copiar esta ruta del terminal y usar el acceso directo OS X ⌘+SHIFT+G en el cuadro de diálogo.

también Instrumentos le preguntará si se debe utilizar la ruta seleccionada para tratar dSYM de carga para esta aplicación en el futuro. Respuesta Sí :)

64

he cambiado de configuración del proyecto para que no incluya el archivo dSYM mientras edificio:

enter image description here

lo cambia para incluir el archivo dSYM ayudó el perfilador desymbolize los símbolos y fijado mi problema:

enter image description here

+0

No creo que esto responda la pregunta, ya que las capturas de pantalla son de Xcode y la pregunta deliberadamente excluye a Xcode (@ mac-twist está usando la línea de comando), pero estoy usando Xcode y tuve este problema , Google me dirigió a esta pregunta, y tu sugerencia funcionó para mí, gracias. – dumbledad

+0

Tengo el mismo problema y uso de instrumentos y Xcode con la opción de compilación de depuración. esto funcionó para mí. Xcode 7.3.1 y iOS 9.3.4 –

+2

¡Muy interesante que la configuración predeterminada de Debug es la inclusión de archivos dSYM! :/ Gracias por compartir esto. Perfilar ahora muestra todos los símbolos! :) – Jona

4

Pasamos tres días tratando de resolver esto para Xcode 7.1/7.3 ...

Al cambiar el destino de implementación a la versión más reciente (9.3 en ese momento) se solucionó este problema. Mi empresa tiene como objetivo 7.0 así que probablemente tenga que crear un Esquema personalizado para perfilar el código en Instrumentos para evitar tener que cambiar el objetivo (u olvidando cambiar el objetivo) cuando hagamos una versión de producción.

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

+3

+1 para esta respuesta, básicamente he intentado todo lo que pude encontrar relacionado con archivos dSYM, foco, esquemas de compilación, formatos de símbolos de depuración, etc. Nada solucionó nada, pero al cambiar al último destino de despliegue los símbolos se encontraron de inmediato. Ahora que lo pienso, creo que esto probablemente también explique por qué el navegador de depuración nunca mostró ninguna memoria o estadísticas de CPU mientras se ejecutaba con un objetivo de implementación menor. Así se hace Apple por no aparecer algún tipo de advertencia o lo que sea: - / – w0utert

1

En 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 vuelva a llamar a "Perfil" después de que se haya reinstalado.

Cuestiones relacionadas