einfachste Methode zum Debuggen von Abstürzen in nativer Bibliothek, verknüpft mit Android App?

8

Ich habe portiert und mehrere Low-Level-C-Bibliotheken für Android für meine Anwendung in meiner Anwendung erstellt. Ich kompilierte sie mithilfe des NDK und verknüpfte sie dann mit System.loadLibrary (). Nach einiger Zeit stürzt meine Anwendung ab, anscheinend aufgrund eines Fehlers in der Bibliothek:

%Vor%

Zunächst einmal bin ich mir nicht ganz sicher, wie ich es richtig interpretiere und ob eine der Speicheradressen tatsächlich nützlich für mich ist. Kann ich zum Beispiel eine Speicheradresse nehmen und feststellen, in welcher Funktion der Fehler aufgetreten ist? Basierend auf dem Stack, in welcher Bibliothek war der Fehler aufgetreten?

Es dauert einige Zeit, bis der Fehler auftritt. Es scheint daher ein wenig schwierig zu sein, Code durchzulaufen. Gibt es eine Möglichkeit, einen Core Dump oder etwas anderes zu bekommen? Ich habe versucht, Protokollnachrichten aus dem systemeigenen Code zu verwenden, aber die Protokollmeldungen sind nicht hilfreich genug, um das Problem einzugrenzen.

    
gnychis 28.07.2011, 15:40
quelle

5 Antworten

5

Wenn Ihre Anwendung tatsächlich in systemeigenem Code abstürzt, empfehle ich Folgendes:

  1. Legen Sie einen Java-Haltepunkt fest, der nach dem Laden Ihrer nativen Bibliothek und vor der Ausführung der nativen Bibliothek aufgerufen wird.
  2. Gehe zum Terminal und starte die ndk-Version von gdb (sie heißt "ndk-gdb"). Geben Sie zunächst "c" ein, um fortzufahren.
  3. Zurück in Java, führe die Ausführung fort.
  4. Sobald Ihre App abstürzt, wird gdb anhalten und Sie können die Integrität des Stacks in nativem Code mit dem Befehl "bt" (backtrace) überprüfen.

Auf jeden Fall sollten Sie in der Lage sein, nativen Code vollständig zu debuggen und Probleme mit ndk-gdb zu beheben. Sie können spezifische Dokumentation auf der ndk-Version von gdb in Ihrer lokalen Installation des ndk finden (zum Beispiel, auf meinem Rechner ist es hier):

android-ndk-r6 / documentation.html

Zum Schluss noch ein grundlegendes Tutorial zu gdb:

gdb-tutorial

Hoffe, das hilft!

    
Kevin Depue 01.08.2011 15:54
quelle
1

Verwenden Sie die ARM CE5 Community-Edition-Tools für Eclipse und können Sie jeden nativen Code debuggen

    
Nasif Noorudeen 01.03.2012 13:29
quelle
1

Versuchen Sie, NDK-STACK mit der Logcat-Ausgabe zu verwenden, es wird Ihnen zumindest sagen, welche Datei der Täter ist und auch die Funktion.

Ссылка

    
severine 26.03.2012 15:30
quelle
0

Sie können das Projekt sequoyah über Eclipse verwenden, um den systemeigenen Code zu debuggen. Es war ein echter Schmerz für ich, um das einzurichten und es zur Arbeit zu bringen, ich erinnere mich nicht an alle Schritte, aber es ist machbar

    
Idistic 28.07.2011 16:13
quelle
0

Ich habe so etwas gefragt Kompilieren Bibliothek mit Quellcode mit NDK-Tools? Mein Vorschlag ist das Zerlegen mit dem Quellcode, dann wird alles einfach.

    
qrtt1 03.08.2011 01:35
quelle