2015-02-03 15 views
23

Ich schreibe eine Android-App, die C/C++ - Code enthält, der neben dem Java-Code kompiliert wird. Meine App stürzt während der Ausführung des systemeigenen Codes ab.Ist es möglich, C/C++ in Android Studio zu debuggen?

Gibt es eine Möglichkeit, durch Android C/C++ - Quelle zu gehen und Variablen zu überprüfen, wie es mit Java-Quelle möglich ist?

Ich bin nicht unbedingt auf der Suche nach einer Möglichkeit, durch die Quelle aus dem Android Studio zu treten. Das ist natürlich die ideale Lösung, aber wenn ich nach dem Start der App von Studio ein externes Tool verwenden muss, ist das in Ordnung. Ich möchte in der Lage sein, Zeile für Zeile durch die Ausführung zu gehen und Variablen zu inspizieren.

Android Studio 1.0.2
Android NDK R10D

Edit: Entstanden aus der unmittelbaren Reaktion von "Verwenden von Eclipse mit ADT-Plugin", lassen Sie mich mehr Anforderungen hinzufügen.
Dieses Projekt begann als Eclipse ADT-Projekt. Ich habe jedoch jetzt zu Android Studio migriert. Mein Projekt wird jetzt mit Gradle erstellt, und meine Projektverzeichnisstruktur spiegelt dies wider. Ich bin bereit, Eclipse zu benutzen; Ich bin nicht bereit, meine Projektstruktur zu ändern, um von Android Studio zu Eclipse zurückzukehren. Wenn es eine Möglichkeit gibt, das Android Studio-Projekt in Eclipse zu öffnen und auf diese Weise zu debuggen, erläutern Sie den Vorgang.

+0

Ich würde Ihnen empfehlen, mit dem ADT-Plugin auf Eclipse umzusteigen. – Nickolaus

Antwort

5

Ab Version 1.3+ Vorschau Android Studio unterstützt C++ Debuggen unter Angabe Android M Developer Preview & Tools:

Am bemerkenswertesten ist eine viel gefragte Funktion unseres Android NDK & Spiele-Entwickler: Code-Bearbeitung und Debugging für C/C++ Code.Basierend auf der JetBrains Clion-Plattform bietet das Android Studio NDK-Plugin Funktionen wie Refactoring und Code-Vervollständigung für C/C++ - Code neben Ihrem Java-Code. Java- und C/C++ - Code-Support ist für Entwickler von Android-Apps kostenlos in eine Entwicklungserfahrung integriert.

+5

Ich habe diesen Build installiert und habe keine Ahnung, wie man nativen Code debuggt. Ich kann cpp-Dateien in meinem Projekt sehen, aber keine Breakpoints setzen oder in jni-Aufrufe einsteigen. Hat es jemand geschafft? – serine

+0

Ich denke, sie haben das Android Studio-Update noch nicht veröffentlicht, das die C++ - Unterstützung enthält, aber gemäß der Ankündigung planen sie, es in 1.3 zu tun (das ist noch in der Vorschau und wird aktualisiert). – vitaut

+0

http://stackoverflow.com/questions/34959013/ndk-debugging-with-gradle-experimental-plugin – Michael

6

[UPDATE]

Ab Juli 2015 DOES Android Studio NDK unterstützen.

Sie können mehr über es auf this link erfahren.


[ALT] NDK ist noch nicht in Android Studio unterstützt.

Wenn wir mit NDK umgehen müssen, ist die einzige Lösung, Eclipse zu verwenden.

EDIT

Wir haben im Grunde mit anderen (nicht-Karte) Funktionen Eclipse-Projekt mit NDK-Funktion (Karte in unserem Fall) und Gradle Projekt halten. Also alles, was mit NDK gemacht werden muss, machen wir in Eclipse und nehmen dann Änderungen in Gradle-Projekt auf.

Um genauer zu sein, innerhalb Verzeichnis /src/main/ wir ein anderes Verzeichnis jniLibs erstellt genannt und stellen die kompilierte *.so Datei in architekturspezifischen Ordner (armeabi-V7A, armeabi, x86 ...). Dann in der Hauptklasse Gradle Projekt hinzugefügt einfach eine Linie

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

Sie diese Zeile pro Projekt nur einmal hinzufügen können. Vielleicht liege ich falsch, aber wir hatten keine Probleme damit.

+0

Können Sie etwas näher ausführen? Ich suche nach bestimmten Details des Prozesses. –

+0

Es gibt auch [VSDroid] (http://www.wingdb.com/wgAndroid.htm), das das Debuggen von nativem Android-Code von Visual Studio unterstützt. Es ist kostenlos verfügbar, wurde aber seit fast einem Jahr nicht mehr aktualisiert. Es ist immer noch in der Beta und * "wie es ist" *. – IInspectable

+2

Ich entwickle auf einem Mac. Kein Visual Studio für mich. –

0

Mit Android Studio 1.4 von tools.android.com ist Debugging möglich. Wenn Sie ein Projekt mit C++ [jni] Code öffnen/erstellen, würde Android Studio eine neue Konfiguration erstellen, etwa $ (Modulname) -nativ

Ich würde diese Konfiguration auswählen, Gradle synchronisieren, Build, Haltepunkt setzen etc und führe es mit Android Studio aus. Nach langem Warten ist mein Debugger verbunden, App ist defekt [ich denke, Sie könnten jetzt auch den Breakpoint setzen]; diese pause ist nicht an meinen gesetzten bruchpunkten, ich lasse es im android studio los und mein breakpoint wird getroffen. Hope this
Some samples sollen hilft mit Android Debugger

3

Es ist nicht wurde nicht nicht funktioniert sehr gut funktionieren.

hallo-jni nicht mit fehlgeschlagen:

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 

Ich 1.4RC1

compileSdkVersion 23 
buildToolsVersion "23.0.1" 

und die "App-native" laufen Konfiguration @Gerry erwähnt werden. Es ist fast da, aber ich finde keine Spur eines lldb-Verzeichnisses im privaten Datenordner meiner App. Ich finde einen 400kb gdbserver im lib Verzeichnis, das von dort verbunden ist, mit meinem eigenen *.so rechts daneben. Leider ist die Option zum Debuggen mit gdb anstelle von lldb mit dem Upgrade von 1.3 auf 1.4 gegangen. NDK 10e versendet eine 400kb gdbserver Binärdatei in ndk\prebuilt\android-arm\gdbserver, die es (ich denke) ist. Am 15. September wurde das gdb debug howto https://github.com/mapbox/mapbox-gl-native/wiki/Android-debugging-with-remote-GDB aktualisiert. Das ist schwieriger als logcat debugging IMO, aber ein aktuelles Thema, Entschuldigung, so negativ zu sein, aber ich glaube nicht, dass lldb tatsächlich funktioniert.

Ich habe hallo-jni ausgeführt und bin zu der gleichen Schlussfolgerung gekommen.

Also als Antwort auf Ihre Frage ist es noch nicht möglich, C/C++ in Android Studio zu debuggen. Entschuldigung, das war nicht die erhoffte Antwort und ich hoffe, dass ich mit schlüssigen Beweisen das Gegenteil beweisen kann, aber genau hier, im Moment, keine Chance!

AKTUALISIEREN Ich erhöhte eine issue, wo ich einen Fix für ein Telefon gegeben wurde.

UPDATE2 Zu früh, um es zu sagen, es ist schließlich experimentell, aber ich bin gelegentlich nicht verbinden, oft wenn nicht immer aus der Reihenfolge treten und Haltepunkte mit unsinnigen Parameterwerte. Ich habe nur einen bedingten Breakpoint gesetzt, der nicht ausgelöst wurde, aber das Logcat zeigt es sollte. Anfangs habe ich angenommen, dass es mein logischer Fehler ist, aber es geht tiefer.

Einfach nur Breakpoints zu schlagen ist sehr hilfreich, aber es ist immer noch eine Million Meilen von Java-Debugging oder Vis Studio C++ - Debugging.

UPDATE3 Zurück zu stabil 1.3.1 als die Canaray-Kanal-Version pausiert für eine Toilettenpause jeden Tastendruck.Während native Debug-Builds zumindest mit meinem "festen" Telefon gestartet werden, werden selbst in hellojni keine Breakpoints oder eine leicht erweiterte Version erreicht, um mehr Möglichkeiten zu bieten. Ich bin es gewohnt, jetzt zu loggen, habe aber bessere Erfahrungen mit Android, NDK und Eclipse gemacht. Eine aufwendigere Lösung ist auch leichter zu knacken, aber zumindest funktioniert es funktioniert.

+0

@TinyGiant ok die Formulierung ist ein wenig aus, aber wenn Sie den letzten Absatz lesen, ist es _ eine Antwort auf die Frage. – Segfault

+0

Ja LLDB funktioniert –

+0

@AlexCohn vielleicht für dich, aber nichts wie es sollte, für mich. Ich sollte diese Antwort einfrieren, bis ich die Chance habe, Hallojni nochmal auszuprobieren. – John

2

Ja, Android Studio unterstützt C++ - Debugging zumindest mit Android Studio 1.5.1 und Android-ndk-r10e.

In den alten Tagen, werden Sie Android.mk und Application.mk machen, um Dateien schreiben müssen, um den C++ Code in Android Studio zu bauen. Du brauchst sie nicht mehr. Solange Sie sie unter den Ordner jni legen, wird Gradle in der Lage sein, es aufzunehmen und zu kompilieren. Sie

enter image description here

Und auch erlauben Bruchstelle und debuggen zu setzen: Sie sollten in etwa wie folgt sehen.

enter image description here

sollten Sie this step-by-step tutorial folgen und mehr darüber erfahren. Und lesen Sie mehr über die Dokumentation here. Ich habe ein vollständiges Arbeitsbeispiel hochgeladen, so dass Sie es herunterladen und auf GitHub ausprobieren können.


-1

ja! Es ist möglich, nativen Code in Android Studio zu debuggen. Seit den Updates unterstützt Android Studio 2.2+ integrierte Tools zum Debuggen von nativem Code.

Verwandte Themen