web-dev-qa-db-ja.com

Android Studio?でC / C ++をデバッグすることは可能ですか?

Androidコードと一緒にコンパイルされるC/C++コードを含むJavaアプリを作成しています。ネイティブコードの実行中にアプリがクラッシュします。

Android C/C++ソースをステップスルーして、Javaソースで可能な変数を検査する方法はありますか?

私は必ずしもソースをステップスルーする方法を探しているわけではありませんAndroid St​​udio内から。それは明らかに理想的なソリューションですが、スタジオからアプリを起動した後に外部ツールを使用する必要がある場合は、それで問題ありません。実行を1行ずつ実行して、変数を検査できるようにしたいと思います。

Android Studio 1.0.2
Android NDK r10d

編集:「EclipseをADTプラグインで使用する」という即時の応答から派生した、さらに要件を追加させてください。
このプロジェクトはEclipse ADTプロジェクトとして始まりました。ただし、Android St​​udioに移行しました。私のプロジェクトは現在Gradleを使用して構築されており、プロジェクトのディレクトリ構造はこれを反映しています。 Eclipseを使用したいと思います。私は、Android St​​udioからEclipseに戻すためにプロジェクト構造を変更するつもりはありませんではありません。 EclipseでAndroid St​​udioプロジェクトを開き、その方法でデバッグする方法がある場合は、プロセスを詳しく説明してください。

23
Sean Beach

バージョン1.3以降のプレビューAndroid StudioはC++デバッグをサポートし、引用符で囲んで Android M Developer Preview&Tools

最も注目すべきは、Android NDK&ゲーム開発者:C/C++コードのコード編集とデバッグ。JetBrainsClionプラットフォームに基づいて、Android = Studio NDKプラグインは、リファクタリングやC/C++コードのコード補完などの機能をJavaコードと一緒に提供します。JavaおよびC/C++コードサポートはAndroidアプリ開発者向けの無料の開発経験。

5
vitaut

[更新]

2015年7月現在、Android StudioはNDKをサポートしています。

詳細については このリンク をご覧ください。


[OLD]NDKはAndroid Studioではまだサポートされていません。

NDKを処理する必要がある場合、唯一の解決策はEclipseを使用することです。

[〜#〜] edit [〜#〜]

基本的に、NDK機能を備えたEclipseプロジェクト(この場合はマップ)と、他の(マップでない)機能を備えたGradleプロジェクトを保持します。したがって、NDKで行う必要のあるすべての作業は、Eclipseで行い、その後、Gradleプロジェクトに変更を含めます。

より正確には、ディレクトリ内/src/main/jniLibsという別のディレクトリを作成し、コンパイル済みの*.soアーキテクチャ固有のフォルダー(armeabi-v7a、armeabi、x86 ...)内のファイル。その後、Gradleプロジェクトのメインクラスに単に行を追加しました

static {
    System.loadLibrary("OurNDKLibName");
}

この行は、プロジェクトごとに1回だけ追加できます。たぶん私は間違っていますが、そうすることに関して何の問題もありませんでした。

6
sandalone

それ ではないじゃなかった うまく機能していません。

こんにちは 失敗する 失敗した:

Starting LLDB server: run-as com.example.sample 
/data/data/com.example.sample/lldb/bin/start_lldb_server.sh 
    /data/data/com.example.sample/lldb 
        /data/data/com.example.sample/lldb/tmp/platform.port1442695333842 "lldb 
    process:gdb-remote packets"
Error while launching debug server on device: 
    com.Android.tools.ndk.run.DebuggerContext$StartServerException: 
        Java.lang.IllegalStateException: Failed to read platform port 
            /data/data/com.example.sample/lldb/tmp/platform.port1442695333842

1.4RC1を使用しています

compileSdkVersion 23
buildToolsVersion "23.0.1"

そして、@ Gerryが言及した「アプリネイティブ」の実行構成。ほぼそこにありますが、アプリのプライベートデータフォルダにlldbディレクトリの痕跡は見つかりません。そこからリンクされているlibディレクトリに400kbgdbserverがあり、自分の*.soがすぐそばにあります。残念ながら、lldbの代わりにgdbを使用してデバッグするオプションは、1.3から1.4へのアップグレードでなくなりました。 NDK 10eは、ndk\prebuilt\Android-arm\gdbserverにある400kbのgdbserverバイナリを出荷しています(これは推測します)。 9月15日に、gdbデバッグハウト https://github.com/mapbox/mapbox-gl-native/wiki/Android-debugging-with-remote-GDB が更新されました。これはIMOをデバッグするlogcatよりも難しいですが、現在のトピックは非常に否定的で申し訳ありませんが、lldbがまだ実際に動作するとは思わない。

Hello-jniを実行し、同じ結論に達しました。

したがって、あなたの質問に対する答えとして、Android StudioでC/C++をデバッグすることはまだできません。申し訳ありませんが、これはあなたが望んでいた答えではありません。それとは反対に、ここでは、今、チャンスはありません!

[〜#〜] update [〜#〜]私は issue を挙げました。

UPDATE2言うには早すぎます、結局実験的ですが、時々接続に失敗することがあります。ナンセンスなパラメーター値。起動しなかった条件付きブレークポイントを設定しただけですが、logcatはそれを示す必要があります。最初はそれが論理的なエラーだと思っていましたが、それはさらに深くなります。

単にブレークポイントにヒットするだけでも非常に役立ちますが、それでもJavaデバッグ、またはVis Studio C++デバッグの100万マイルに足りません。

UPDATE3canarayチャンネルバージョンは、キーストロークごとにトイレ休憩のために一時停止していたため、安定した1.3.1に戻りました。ネイティブデバッグビルドは、少なくとも「修正された」電話機で起動しますが、hellojni、またはより多くの機会を与えるためのわずかに拡張されたバージョンでもブレークポイントにヒットしません。私は今ではlogcatに慣れていますが、Android、NDK、Eclipseでより良いデバグを体験しました。より精巧な解決策も簡単に破ることができますが、少なくともそれはworksです。

3
John

はい、Android Studioは少なくともAndroid studio 1.5.1およびAndroid-ndkでC++デバッグをサポートします-r10e。

昔は、C++コードをビルドするために、メイクファイルAndroid.mkおよびApplication.mkを記述する必要があります。 in Android Studio。もう必要ありません。jniフォルダーの下に置く限り、gradleは次のことができます。次のようなものが表示されるはずです。

enter image description here

また、ブレークポイントを設定してデバッグすることもできます。

enter image description here

このステップバイステップのチュートリアル に従って、それについてさらに学ぶ必要があります。そして、ドキュメンテーションについてもっと読む hereGitHub でダウンロードして試すことができるように、完全な動作例をアップロードしました。


2
Yuchen Zhong

Tools.Android.comのAndroid Studio 1.4を使用すると、デバッグが可能になります。C++ [jni]コードを含むプロジェクトを開いたり作成したりすると、Android studioは$(module_name)-nativeのような新しい構成を作成します

私はこの構成を選択し、グラドルを同期し、ビルドし、ブレークポイントなどを設定し、Android Studioで実行します。長い待ち時間の後、デバッガが接続され、アプリが壊れます[この時点でブレークポイントを設定];このブレークは設定されたブレークポイントではなく、Android studioとブレークポイントにヒットします。これが役立つことを望みます。
一部のサンプル は、Androidデバッガーで動作するはずです

0
Gerry