2009-09-03 18 views
9

Tengo un proyecto para Mac OS X 10.5 que estoy usando 10.6 usando Xcode 3.2. Cuando uso GCC 4.2 para la construcción de depuración y llego a un punto de interrupción, el depurador de Xcode muestra la información de la variable local normalmente. Si elijo LLVM GCC 4.2 o Clang LLVM, cuando llego al punto de interrupción, los símbolos locales no están disponibles, y GDB dice Sin símbolo 'self' en el contexto actual si intento imprimir auto o cualquier otro símbolo local. En todos los casos Generar información de depuración se establece la opción. La configuración de depuración está configurada en $(NATIVE_ARCH) y 10.5 SDK, Crear arquitectura activa solo se establece la opción. Cuando se inicia GDB, puedo ver que se está configurando como x86_64-apple-darwin. Debo estar perdiendo algo obvio. ¿Cómo hago que GDB muestre símbolos locales cuando se usa un compilador LLVM?Xcode 3.2 + LLVM = sin símbolos locales al depurar

Respuesta

9

Para los que no estén familiarizados, un poco más de detalle para la respuesta de cdespinosa, que funcionó para mí y que voté a favor.

  1. En el menú de Xcode, seleccione Proyecto> Editar configuración del proyecto ...
  2. Seleccione la pestaña Generar
  3. En la búsqueda del tipo de caja "nivel de optimización", seleccione ese campo, y seleccione Ninguno.
  4. Siguiente búsqueda de "Formato de información de depuración", elija ese campo y seleccione "DWARF" o "DWARF con dSYM".

Hubiera puesto esto en los comentarios a su publicación si tuviera los privilegios. ;)

Esto me costó un tiempo serio, y francamente fue un poco descuidado por parte de Apple, pero en general no me puedo quejar.

0

GDB de FSF solo agregó soporte para código JIT muy recently.

No sé si el GDB suministrado por Apple tiene soporte para eso (¿obtiene rastreos de pila razonables?). Si lo hace, este soporte es (aparentemente) incompleto.

+0

¿Qué te hace pensar que esto tiene algo que ver con JIT, o que Apple enviaría un gdb que no funciona del todo con el compilador que escribieron? – user57368

+0

La pila se ve correcta, muestra todas mis funciones. Son vars locales que faltan. – glebd

+0

Pero llvm puede generar código nativo, no bytecode. – osgx

4

Esto puede ayudar. Intente desactivar "Optimización del tiempo de enlace" en las opciones de compilación del proyecto. Eso solucionó un problema que tenía con los símbolos de depuración faltantes.

De hecho, eso solucionó un montón de problemas extraños que tenía con Clang. Yo diría que esa característica es demasiado sangrienta para usar todavía.

5

Asegúrate de que estás construyendo con símbolos enanos y sin optimización. llvm es un nuevo back-end, y no todo su codegen optimizado está conectado para depurar la generación de símbolos.

0

Estaba teniendo este problema y lo solucioné marcando al lado del elemento del menú: "Proyecto> Establecer configuración de compilación activa> Depurar". Anteriormente, se seleccionaba la opción "Liberar". Los lugareños comenzaron a aparecer en el depurador de mi proyecto a partir de ese momento.

Cuestiones relacionadas