2015-02-19 4 views
16

Sto sviluppando un'app per Android con NDK. Ho due progetti. Uno è per la mia libreria nativa che utilizza NDK e genera il file .so.Come ottenere il punto di interruzione nel codice nativo NDK e eseguire il debug del codice nativo in Android Studio?

Sto utilizzando Android Studio ma disabilito la compilazione automatica e la creazione abilitata utilizzando ndk-build. Sto usando Windows 7.

Ora dopo aver generato il file .so copio quelli nel mio progetto di applicazione principale che utilizza anche ndk-build per compilare le funzioni JNI in cui sto chiamando le funzioni della mia libreria. Spero di essere pulito fino a questo punto. In caso contrario, darò maggiori dettagli su richiesta.

Ora eseguo la mia applicazione nel dispositivo utilizzando Android Studio e posso inserire il punto di interruzione nel codice java e eseguire il debug di quel codice ma non riesco a eseguire il debug della chiamata JNI e del codice nativo che ho nel progetto separato. Ho bisogno di eseguire il debug all'interno del mio codice libreria. Quindi c'è un modo per raggiungere questo obiettivo?

Ho visto VisualGDB ma è pagato. Quindi fammi sapere se c'è qualche alternativa al pieno riempimento i miei requisiti di debug. Ho cercato molto ma non ho trovato alcuna soluzione concreta.

Sono in grado di vedere l'opzione in Android Studio per il collegamento al processo Android dove posso vedere il mio dispositivo in esecuzione ma non sono sicuro di come utilizzarlo in modo da poter eseguire il debug dal codice libreria nativo (che è in un progetto separato senza alcuna attività) .

fatemi sapere se è richiesto maggiori dettagli

+0

AFAIK, il debug nativo non è possibile in Android Studio. A proposito, se aggiungi qualche formattazione alla tua domanda e la rendi meno "densa", più persone la leggeranno. – JonasCz

+0

@JonasCz In realtà, è ora, vedere la risposta di Sistr sotto – Shlublu

+0

@Premal, vedo che non c'è una risposta accettata, nessuna delle soluzioni proposte funziona quando si esegue il debug di un file .so da un progetto nel 2 ° progetto? – Deemoe

risposta

4

Android 1.3+ Studio supporta il debug nativo.

per configurarlo, attenersi alla seguente procedura:

  1. Modifica la gradle-wrapper.properties, local.properties, ed entrambi i file build.gradle come mostrato nella this guide
  2. Sync Gradle
  3. Creare e selezionare la nuova configurazione di build:

    Fare clic sul menu a discesa accanto al pulsante di esecuzione) -> Modifica configurazioni, fare clic sul segno più, scegliere Android nativo, f malato nelle opzioni sulla destra (ho usato LLDB nella scheda del debugger nativo) e dovresti essere impostato.

  4. Impostare i punti di pulsante di debug

  5. Hit C++ e di essere paziente (a volte il debugger vuole un po ')

sono stato in grado di eseguire il debug di codice nativo in Lubuntu 14.04 con Android Studio 1.3 (canale stabile). Anche se altri hanno presumibilmente avuto successo sotto Windows, I haven't been able to debug in modo nativo in Windows 8.1 (Ho provato con Android Studio 1.3, 1.3.2 e 1.4 anteprima 3).

Aggiornamento Android Studio 1.4 Beta è appena uscito. L'ho testato ed è stato in grado di eseguire il debug nativo su Windows 8.1.

+0

Per me tutto sembrava a posto, nessun errore, il debugger stava collegando nella console. Ma il mio punto di interruzione semplicemente non è stato colpito. Il mio punto di interruzione era in un pezzo di codice chiamato nella mia Activity onCreate. Risulta che c'è un bug in Android Studio 1.3 in cui i punti di interruzione non vengono colpiti all'avvio dell'app. Ho aggiornato il mio IDE a 1.4 beta nel canale Canary e funziona perfettamente. –

10

In Android Studio 2.Anteprima 0 il processo è un po 'diverso (ANS più facile credo):

  1. Installa "LLDB": Andare in Strumenti-> Android-> SDK Manager, quindi andare nella scheda "SDK Tools" e fare di sicuro controllare "LLDB" (Vicino alla fine dell'elenco di solito)
  2. Selezionare una/la variante "Debug": Nell'angolo in basso a sinistra di AS, fare clic su "Varianti di build", viene chiamata la variante di debug predefinita "Debug"
  3. Selezionare una configurazione nativa: lato sinistro del pulsante di esecuzione (il triangolo verde), La configurazione nativa predefinita è calle d "app-native"
  4. Impostare un punto di interruzione
  5. lanciare la vostra applicazione in di debug cliccando sul piccolo bug sul lato destro del pulsante di esecuzione.

Se non funziona, verificare che la configurazione di nativo ha tipo di debug "ibrida" selezionato: Sulla destra del pulsante di riproduzione, fare clic sul piccolo triangolo, selezionare "Modifica configurazioni", selezionare il proprio " configurazione nativa app, vai nella scheda "Debugger" e seleziona "Debug type: Hybrid".

+1

BTW se provi a utilizzare graddle versione 2.9 e successive, potresti avere un'eccezione ** puntatore null ** in fase di compilazione. Se è il caso, vai su [preferences] -> [Build, Execution, Deployment] -> [Instant Run] e verifica che l'esecuzione istantanea sia disattivata. Graddle 2.9 ha un problema con esecuzione istantanea. – Sistr

+0

HAAAAAAAAhahaha !!! Scusate. Che ci crediate o no, THE STEP 1 era quello che mi mancava! Ora funziona (Studio 2.0 Beta 4, Gradle 2.10, non quello sperimentale). Grazie ! Così tanto! Questa dovrebbe essere la risposta accettata! – Shlublu

+0

Felice di vederlo aiutato :) – Sistr

1

sono stato in grado di impostare i punti di interruzione e passo in codice nativo, ma solo quando tutti i seguenti fosse vero:

  1. file La libreria nativa generato .so mantenuto i loro simboli di debug
  2. fonti erano in dotazione (vedi "Biblioteca Proprietà" del menu)
  3. ho impostato la corsa/costruire configurazione per utilizzare un debugger nativo (come descritto here)

si sta lavorando per me righ t ora in Android Studio 1.5, utilizzando Gradle Experimental Plugin