LLDB: ¿agregar un archivo de símbolos?

Estoy tratando de depurar una aplicación nativa de Android de la depuración nativa de Android Studio usando lldb.
Mi aplicación nativa contiene un libmain.so que es compilado y ejecutado por Android Studio y otro libother.so externo compilado por mí. Al depurar, soy capaz de establecer puntos de interrupción en libmain.so pero no libother.so.
Ambos objetos compartidos son despojados, pero de alguna manera Android Studio hace que lldb sepa sobre la versión sin restricciones de libmain.so. Quiero hacer lo mismo para libother.so.

¿Qué comando necesito para darle a lldb para que cargue los símbolos de un archivo unstripped en mi máquina local?
Cuando hago la image list veo el principal .so con una trayectoria los puntos a su versión unstripped local:

/Users/username/Projects/gow/android/AppName/app/build/intermediates/binaries/debug/arm7/obj/armeabi-v7a/libmain.so

Y el segundo .so con una ruta como /var/folders/3w/5nr95lxx3qvdm2ylb8c8b7500000gn/T/./lldb/module_cache/remote-android/.cache/B5F32653-0000-0000-0000-000000000000/libother.so

¿Cómo hago que lldb encuentre la versión sin libother.so de libother.so ?
He intentado image add y target symbols add pero no funcionó.

Las respuestas en este hilo parecen ser específicas para MacOSX. Estoy utilizando Linux, por lo que estas respuestas no fueron muy útiles. Después de algún tiempo lo he descubierto, y aquí es una solución muy simple. Antes de hacer "adjuntar proceso" debe ejecutar el siguiente comando:

 settings set target.exec-search-paths /path/to/directory/with/unstripped/library/on/host 

Con esta configuración lldb no tiene problemas para encontrar la versión correcta de la biblioteca.

BTW, las últimas versiones de Android Studio no tienen ningún problema con las bibliotecas externas (de hecho, la misma técnica se utiliza para establecer las rutas correctas todas las bibliotecas, tanto "interno" y "externo", al menos si usted está construyendo con Gradle ). Pero si usas lldb autónomo, esto puede ser muy útil.

Para evitar escribirlo después del inicio de cada sesión de depuración, puede guardar este comando en el archivo (por ejemplo, lldb.cmd ) y luego iniciar lldb así:

 ./lldb -S lldb.cmd 

Utilice la configuración "target.source-map"

(Lldb) lista de valores target.source-map
Source-map – Los remappings de ruta de origen utilizados para rastrear el cambio de ubicación entre un archivo de origen cuando se construye y donde existe en el sistema actual. Consiste en una matriz de duples, el primer elemento de cada duple es una parte (comenzando en la raíz) de la ruta al archivo cuando se construyó, y el segundo es donde el resto de la jerarquía de construcción original está enraizada en el Sistema local. Cada elemento de la matriz se comprueba en orden y gana la primera que da como resultado una coincidencia.

es decir

 settings set target.source-map /build_src /source 

Donde el entorno del edificio está en /build_src y los archivos .dSYM (símbolos) se copian en /source

EDITAR:

Los binarios se quitan a menudo después de ser construidos y empaquetados en una liberación. Si su sistema de compilación guarda un ejecutable no estropeado, puede proporcionarse una ruta a este ejecutable utilizando la clave DBGSymbolRichExecutable

Puede escribir un comando de shell al que se le dará un valor UUID y se espera que devuelva un plist con ciertas claves que especifican dónde está el binario.

Puede habilitar el script de shell utilizando:

 % defaults write com.apple.DebugSymbols DBGShellCommands /path/to/shellscript 

El script de shell se invocará con un valor de cadena UUID como "23516BE4-29BE-350C-91C9-F36E7999F0F1". El script de shell puede responder con un plist en el siguiente formato:

 <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd";> <plist version="1.0"> <dict> <key>23516BE4-29BE-350C-91C9-F36E7999F0F1</key> <dict> <key>DBGArchitecture</key> <string>i386</string> <key>DBGBuildSourcePath</key> <string>/path/to/build/sources</string> <key>DBGSourcePath</key> <string>/path/to/actual/sources</string> <key>DBGDSYMPath</key> <string>/path/to/foo.dSYM/Contents/Resources/DWARF/foo</string> <key>DBGSymbolRichExecutable</key> <string>/path/to/unstripped/exectuable</string> </dict> <key>A40597AA-5529-3337-8C09-D8A014EB1578</key> <dict> <key>DBGArchitecture</key> <string>x86_64</string> ..... </dict> </dict> </plist> 

Para más detalles, consulte:

http://lldb.llvm.org/symbols.html

https://www.mail-archive.com/[email protected]/msg01142.html

EDIT 2:

Comando de Terminal para imprimir el UUID de compilación de un ejecutable

 $ xcrun dwarfdump --uuid <PATH_TO_APP_EXECUTABLE> 

fuente

Para completar, lo que acabé haciendo es
– add -Wl,--build-id=sha1 a LOCAL_LDFLAGS en el Android.mk de libmain.so
– agregue un enlace simbólico de /Users/username/Projects/gow/android/AppName/app/build/intermediates/binaries/debug/arm7/obj/armeabi-v7a/ al objeto compartido /Users/username/Projects/gow/android/AppName/app/build/intermediates/binaries/debug/arm7/obj/armeabi-v7a/ .

Eso permitió que el LLDB de Android-Studio encontrara los no desatados. Así que, correctamente presentar sus símbolos y me permitió añadir puntos de interrupción en código libmain.so.

  • Cómo inhabilitar el protector de datos cromado durante la depuración
  • Depuración de la aplicación android en el destino en QtCreator
  • Android depura una aplicación de accesorios USB
  • No se puede conectar el depurador a Jelly Bean Galaxy Nexus
  • La depuración del navegador Android 2.3 se bloquea
  • ¿Cómo puedo obtener puntos de interrupción (y ver números de línea de error) al depurar JavaScript en Android?
  • ¿Qué significa "W / AudioFlinger (34): escritura bloqueada por 70 ms, 2236 escrituras retrasadas, hilo"?
  • ¿Cómo puedo conectarme a Android con ADB sobre TCP?
  • Xamarin Android (Visual Studio 2015) No se pudo conectar con el depurador
  • ¿Cómo puedo desactivar la depuración de Android USB mediante programación
  • Eclipse no muestra errores de XML
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.