web-dev-qa-db-fra.com

Débogage des modules de bibliothèque C++/natifs ne fonctionnant pas avec Android Studio (Cmake utilisé)

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

 enter image description here


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   
7
daemmie

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:

https://code.google.com/p/Android/issues/detail?id=222276

9
daemmie

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.

2
uelordi

J'ai eu la même erreur ("Attention! Aucun répertoire de symboles trouvé - vérifiez votre configuration de débogage native."). Ma solution était (Android Studio 3.2):

Exécuter → Modifier la configuration → onglet "Débogueur" → ajoutez votre chemin de travail aux répertoires de symboles.

 enter image description here

1
brkeyal