2012-07-20 14 views
8

Al compilar mi proyecto con clang ++, aparentemente la ruta a los archivos fuente no está incluida en el código del objeto. Esto significa que gdb no puede encontrar los archivos de origen para mostrar el código. Para instancias específicas, puedo usar el comando directory de gdb para agregar un directorio, pero mi proyecto tiene muchos directorios fuente y esto se vuelve molesto muy rápidamente.gdb no encuentra los archivos fuente compilados por clang ++

Cuando cambio mi configuración para usar g ++, gdb simplemente busca todos mis archivos fuente.

Esta funcionalidad funcionaba clang ++ 2.9 en Snow Leopard, pero no funciona con clang ++ 3.1 en Lion. Tengo XCode 4.3.2.

¿Existe una opción de clang que obligue a utilizar las rutas completas en los archivos de objeto? ¿Podría pasar algo más con mi configuración?

+0

No estoy seguro, pero ¿has hecho un '-d'? –

+0

@NeelBasu Mis archivos fuente están distribuidos en 40 directorios, y prefiero no usar '-d' 40 veces. – robert

Respuesta

4

Descubrí esto: el problema ocurre cuando se crean proyectos con makefiles jerárquicos. Si se ha creado un subdirectorio desde un directorio principal (en mi archivo MAKE: make -w -C sub-dir), entonces gdb no puede abrir el archivo fuente. Al cambiar al subdirectorio y hacer una llamada para este directorio, gdb encuentra la fuente. Puede verificar esto buscando en la ruta de compilación en los archivos de objetos generados. Usé strings object-file | grep $HOME.

Me di cuenta también: esto no sucedió para un archivo de objeto: este archivo no se ha compilado con CC. Este archivo ha sido compilado con esql. Al final, esql llama CC.

Es por eso que probé esta solución: no llame clang directamente desde make. Llamar clang desde un script de shell.

$ cat ~/bin/mycc 

/usr/bin/cc "[email protected]" 

$ export CC=mycc 
$ make 

¡Hurra! ¡gdb abre los archivos fuente!

BTW: reemplazar make -w -C sub-dir por (cd sub-dir;make -w) es otra solución.

+0

Esto es interesante, pero utilizo [waf] (https://code.google.com/p/waf/), en el que las fuentes se incluyen de forma jerárquica, pero waf en sí no es jerárquico. – robert

+0

verificado: embaló un pequeño proyecto. Usando waf para construir el proyecto. gdb falla: '1 \t ../dir1/foo.c: No existe dicho archivo o directorio. Después de reconstruir el proyecto con: 'CC = mycc ./waf-1.6.1 configure build', el problema desapareció:' (gdb) list main int main() { return 0; } ' – Rene

+0

Voy a intentar eso. – robert

Cuestiones relacionadas