Je ne parviens pas à déboguer les fichiers C++ de mon module de bibliothèque.
Est-ce possible en général?
Le débogage fonctionne correctement si le projet d’application contient le code c ++. Mais je souhaite déplacer le code C++ dans un module de bibliothèque.
Le message d'erreur lors du démarrage de la session:
Lance maintenant une session de débogage native
Attention! Aucun répertoire de symboles trouvé - veuillez vérifier votre configuration de débogage native
Fichier de classement de ma bibliothèque:
apply plugin: 'com.Android.library'
Android {
compileSdkVersion 24
buildToolsVersion "25.0.2"
defaultConfig {
minSdkVersion 16
targetSdkVersion 21
versionCode 1
versionName "1.0"
externalNativeBuild {
cmake {
arguments "-DANDROID_PLATFORM_LEVEL=${11}",
'-DANDROID_TOOLCHAIN=clang', '-DANDROID_STL=gnustl_static'
}
}
}
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-Android.txt'), 'proguard-rules.pro'
}
}
externalNativeBuild {
cmake {
path "CMakeLists.txt"
}
}
}
dependencies {
compile fileTree(dir: 'libs', include: ['*.jar'])
compile 'com.Android.support:support-annotations:24.2.0'
}
Dans la configuration d'exécution, le débogueur est défini sur auto
Ajouts:
J'utilise:
Gradé: 2.2.3
Android Studio: 2.2.3
dans la console LLLB, j'ai vérifié la liste des points d'arrêt avec:
liste de points d'arrêt -v
tous mes points de contrôle sont énumérés ici.
Point d'arrêt non fonctionnel
1: file = 'C:\Android-dev\...\test.cpp', line = 19, exact_match = 0
..c'est tout
Point d'arrêt de travail
1: file = 'C:\Android-dev\...\test.cpp', line = 19, exact_match = 0
1.1:
module = C:\Android-dev\...\test.so
compile unit = gl_code.cpp
function = testFunc(..)
location = C:\Android-dev\...\test.cpp:16
address = 0x0000007f871d068c
resolved = true
hit count = 1
Les raisons semblent être qu'une version de la lib est créée, , Qui ne prend pas en charge le débogage. Même si l'application est construite avec des options de débogage.
Solution:
Pour résoudre ce problème, procédez comme suit. Cela garantit qu'une version de débogage est construite.
Dans vos applications build.gradle change:
compile project(':nativelib')
à
compile project(path: ':nativelib' , configuration: 'debug')
Dans les bibliothèques build.gradle, ajoutez:
Android {
publishNonDefault true //this line
compileSdkVersion 24
buildToolsVersion "25.0.2"
defaultConfig {
...
}
...
}
Mises à jour:
Voir le numéro correspondant de Google pour les mises à jour:
Il y a quelques mois, j'avais le même problème avec mes propres bibliothèques, car je pensais que si j'ajoutais l'indicateur -g (gcc), il générerait les symboles de débogage, tels que les applications de bureau (Linux, noyau Unix).
Mais, en réalité, la génération de symboles de débogage ne fonctionne pas.
Je vois que vous utilisez Cmake en tant qu’outil de construction externe et compilateur Clang.
Donc, dans mon cas, je configure mon script cmake script avec gcc mais en dehors des scripts, mais je pense que ce sera pareil, j’ajoute -mapcs-frame dans CMAKE_CXX_FLAGS.
externalNativeBuild {
cmake {
arguments "-DANDROID_PLATFORM_LEVEL=${11}",
'-DANDROID_TOOLCHAIN=gcc',
'-DANDROID_STL=gnustl_static',
'DCMAKE_CXX_FLAGS=-mapcs-frame'
}
}
Je sais que si vous utilisez Clang Compile, ce drapeau pourrait ne pas fonctionner. Mais mon idée était de partager mon expérience avec le débogage natif sur Android.
J'espère que ces indices pourraient vous aider.
À votre santé.
Unai.