2017-01-24 7 views
7

ライブラリモジュールのC++ファイルのデバッグに問題があります。Android Studio(Cmake使用)で動作しないC++ /ネイティブライブラリモジュールのデバッグ

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

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

エラーメッセージセッションを開始する一方で:

今すぐネイティブデバッグセッション

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

のGradleファイル:デバッガが自動

enter image description here

に設定されている実行構成で

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


追加:

イム使用して:

のGradle:2.2.3

のAndroidメーカー:LLLBコンソールの2.2.3


は、私がブレークポイント一覧を確認しました:

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

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

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

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

..thatsすべて

ワーキングブレークポイント

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

デバッグをサポートしていない のlibのリリースバージョンが作成されているようです。 アプリがデバッグオプションでビルドされている場合でも。

ソリューション:

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


変更build.gradle:

compile project(':nativelib') 

のlibsに

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

に追加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

2

私は思ったので、私はいくつかのヶ月前に自分のライブラリと同様の問題がありましたもし私が-g(gcc)フラグを追加すると、デバッグシンボルaデスクトップ(Linux、Unixカーネル)のアプリです。

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

私は外部ビルドツールとclangコンパイラとしてCmakeを使用しています。

だから私の場合、私はGCCではなくのGradleスクリプトのうち、私のcmakeのスクリプトを設定するが、私はそれが同じになると思い、私はCMAKE_CXX_FLAGSに-mapcsフレームを追加します。

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

私が知っていることは、clangコンパイルを使用するとこのフラグが機能しない可能性があります。しかし私の考えは、私の経験をアンドロイドのネイティブデバッグと共有することでした。

私はこの手がかりがあなたを助けてくれることを願っています。

乾杯。
Unai。

+0

感謝を。私はgccと引数でコンパイルしようとしました。それでも同じ問題があります。 – FlanschiFox

+0

たぶんあなたは、ネイティブライブラリをデバッグするためにgradle experimentalを使っていますか?私は通常、gradle 0.7.0実験を使用します。 – uelordi

+0

私はgradle 2.2.3を使用します。 Docは2.2.0からサポートされていると言っています – FlanschiFox

関連する問題