web-dev-qa-db-ja.com

Android Studio(Cmakeを使用)で動作しないC ++ /ネイティブライブラリモジュールのデバッグ

ライブラリモジュールのC++ファイルのデバッグに問題があります。

これは一般的に可能ですか?

アプリケーションプロジェクトにc ++コードが含まれている場合、デバッグは正常に機能します。しかし、C++コードをライブラリモジュールに移動したいと思います。

セッション開始時のエラーメッセージ:

ネイティブデバッグセッションを開始します

注意!シンボルディレクトリが見つかりません-ネイティブデバッグ構成を確認してください

私のlibのgradleファイル:

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'
}

実行構成では、デバッガーはautoに設定されます

enter image description here


追加:

使用中:

Gradle:2.2.3

Android Studio:2.2.3


lLLBコンソールで、ブレークポイントリストを次のようにチェックしました。

ブレークポイントリスト-v

私のすべてのチェックポイントがそこにリストされています。

動作しないブレークポイント

1: file = 'C:\Android-dev\...\test.cpp', line = 19, exact_match = 0

..それで全部です

作業ブレークポイント

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

その理由は、アプリがデバッグオプションを使用してビルドされている場合でも、デバッグをサポートしないリリースバージョンのlibが作成されているためと思われます。

解決策:

この問題を解決するには、次の回避策を実行します。これにより、デバッグバージョンが確実にビルドされます。


アプリのbuild.gradleの変更:

compile project(':nativelib')

compile project(path: ':nativelib' , configuration: 'debug')

Libs build.gradleに以下を追加します:

Android {

    publishNonDefault  true //this line

    compileSdkVersion 24
    buildToolsVersion "25.0.2"
    defaultConfig {
    ...
    }
...
}    

更新:

更新については、Googleの問題を参照してください。

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

9
daemmie

同じエラーが発生しました(「注意!シンボルディレクトリが見つかりません。ネイティブデバッグ構成を確認してください。」)。私の解決策は(Android Studio 3.2)でした:

[実行]→[構成の編集]→[デバッガー]タブ→作業パスをシンボルディレクトリに追加します。

enter image description here

3
brkeyal

-g(gcc)フラグを追加すると、デスクトップ(Linux、UNIXカーネル)アプリのようにデバッグシンボルが生成されると思ったため、数か月前に自分のライブラリで同様の問題が発生しました。

ただし、実際にはデバッグシンボルを生成することはできません。

Cmakeを外部ビルドツールおよびclangコンパイラとして使用しているようです。

したがって、私の場合、cmakeスクリプトをgccで構成しますが、gradleスクリプトは使用しませんが、同じだと思います。CMAKE_CXX_FLAGSに-mapcs-frameを追加します。

externalNativeBuild {
        cmake {
            arguments "-DANDROID_PLATFORM_LEVEL=${11}",
                    '-DANDROID_TOOLCHAIN=gcc', 
                    '-DANDROID_STL=gnustl_static',
                    'DCMAKE_CXX_FLAGS=-mapcs-frame'
        }
    }

Clang compileを使用している場合、このフラグが機能しない可能性があることを私は知っています。しかし、私の考えは、私の経験をAndroidネイティブデバッグと共有することでした。

この手がかりがあなたのお役に立てば幸いです。

乾杯。
ウナイ。

2
uelordi