2016-07-25 6 views
-1

Ich habe eine Hallo Welt C++ - Anwendung, die mit vielen 3rdpart und hausgemachten Bibliotheken verbindet. Es stürzt sofort ab, wenn es versucht wird, es mit Segmentation Fault zu laden. Der gleiche Code, mit den gleichen Abhängigkeiten, alle für Linux kompiliert - läuft erfolgreich.Android C++ - Anwendung stürzt beim Verknüpfen mit der freigegebenen Bibliothek Stufe

Wie kann ich anfangen, es zu debuggen?
Was könnte der Grund sein?

Edit: Das ist es, was druckt Logcat:

F/libc (8129): Fatal signal 11 (SIGSEGV), code 128, fault addr 0x0 in tid 8129 (HelloWorldApp) I/DEBUG (2876): *** *** *** *** *** *** 
*** *** *** *** *** *** *** *** *** *** I/DEBUG (2876): Build fingerprint: 'Intel/cht_hr/cht_hr:5.1.1/LMY47Z/LS0000037:userdebug/test-keys' I/DEBUG (2876): Revision: '0' W/NativeCrashListener(3194): Couldn't find ProcessRecord for pid 8129 I/DEBUG (2876): ABI: 'x86' I/DEBUG (2876): pid: 8129, tid: 8129, name: HelloWorldApp >>> ./StaticImageOR <<< E/DEBUG (2876): AM write failure (32/Broken pipe) I/DEBUG (2876): signal 11 (SIGSEGV), code 128 (SI_KERNEL), fault addr 0x0 I/DEBUG (2876):  eax ff84cadc ebx f32b7c6c ecx 00000010 edx 00000000 I/DEBUG (2876):  esi f32c6610 edi 00000000 I/DEBUG (2876):  xcs 00000023 xds 0000002b xes 0000002b xfs 00000000 xss 0000002b I/DEBUG (2876):  eip f2600cfb ebp ff84c6dc esp ff84c5f4 flags 00010246 I/DEBUG (2876): I/DEBUG (2876): backtrace: I/DEBUG (2876):  #00 pc 0062fcfb /system/lib/libcommander.so I/DEBUG (2876):  #01 pc 0017651f /system/lib/libcommander.so I/DEBUG (2876):  #02 pc 00001fcb /system/bin/linker (__dl__ZN6soinfo16CallConstructorsEv.part.23+1275) I/DEBUG (2876): 
#03 pc 00001c26 /system/bin/linker (__dl__ZN6soinfo16CallConstructorsEv.part.23+342) I/DEBUG (2876): 
#04 pc 00001c26 /system/bin/linker (__dl__ZN6soinfo16CallConstructorsEv.part.23+342) I/DEBUG (2876): 
#05 pc 00008706 /system/bin/linker (__dl___linker_init+4998) I/DEBUG (2876):  #06 pc 00009e0e /system/bin/linker (__dl__start+30) I/DEBUG (2876): I/DEBUG (2876): Tombstone written to: /data/tombstones/tombstone_02 

So undersatnd ich das Problem in libcommander Laden ist.
Wie geht es weiter?

Danke!

+0

Ausführen in einem Debugger mit dem Emulator? Es könnte einer von Tausenden von Gründen sein. –

+0

@JoachimPileborg: Das ist genau meine Frage: Wie kann ich es debuggen? –

+0

Android ist eine gesperrte Subset-API (C und C++). Vielleicht rufen Ihre Bibliotheken Funktionen auf, die in den C/C++ - Bibliotheken von Android nicht existieren (oder eingeschränkt sind). Wie libcomander ist für die comandline-Verarbeitung ist Ihr Gerät verwurzelt? –

Antwort

1

Der einfachste Weg ist, Ihre Anwendung unter Debugger zu starten, dann ist das neueste Android Studio wirklich gut im Debuggen von C++ - Code. Anweisungen zum Debuggen von JNI-Code finden Sie unter Erstellen von Hello-JNI mit Android Studio unter google code labs.

Andere Lösung ist in Logcat zu suchen, könnten Sie dort Grund für den Absturz finden. Zum Beispiel können Sie Linien wie

I/DEBUG (8704): signal 11 (SIGSEGV), fault addr deadbaad 
... 
... 

finden, die Call-Stack für den Ort enthält, wo der Absturz passiert ist. Mit diesen Informationen können Sie ndk-stack - tool verwenden (siehe hier ndk-stack), um Rahmenadressen in symbolische Namen umzuwandeln.

Android wird in Logcat andere Warnungen/jni Fehler, die Ihnen helfen können, einen Ort des Problems zu finden.

Verwandte Themen