Speicher Korruption Debuggen mit android ndk

Ich bin immer ein segfault in der nativen Teil meiner android-app, die im moment eine void-Funktion gibt an seinen Aufrufer. Um besser visualisieren, habe ich eine log-Anweisung am Ende der aufgerufenen Funktion, und eine, in der Anrufer die Funktion, die direkt nach dem aufrufen der angerufene (sorry für das Wortspiel).
In der logcat, die erste Meldung wird ausgegeben, und die zweite nicht (die app stürzt ab).

Denken über eine mögliche Speicherbeschädigung ich beschlossen, Sie zu aktivieren malloc debug (Angabe "setprop-libc.debug.malloc 10" in der adb shell). Dann, ich bekomme in der logcat direkt nach dem log-Nachricht vom Ende der aufgerufenen Funktion:

D/MyApp - NativeSide(12778):  I am the callee function and I am about to return!
E/libc    (12778): *** FREE CHECK: buffer 0x82869900 corrupted 16 bytes before allocation
E/libc    (12778): call stack:
E/libc    (12778):  0: 8000e3ea
E/libc    (12778):  1: 8000e49c
E/libc    (12778):  2: 8000e4e2
E/libc    (12778):  3: 8000e540
E/libc    (12778):  4: afd14ccc
E/libc    (12778):  5: 81258188
E/libc    (12778):  6: 81258188
E/libc    (12778):  7: 81258188
E/libc    (12778):  8: 81258188
E/libc    (12778):  9: 81258188
E/libc    (12778): 10: 81258188
E/libc    (12778): 11: 81258188
E/libc    (12778): 12: 81258188
E/libc    (12778): 13: 81258188
E/libc    (12778): 14: 81258188
E/libc    (12778): 15: 81258188
E/libc    (12778): 16: 81258188
E/libc    (12778): 17: 81258188
E/libc    (12778): 18: 81258188
E/libc    (12778): 19: 81258188

Konnte ich nicht finden keine Informationen zum entschlüsseln dieser Ausgabe. Die zahlen in jeder Zeile verändern sich bei jedem app-Start. Ich hoffe es gibt einen Weg, um diese Informationen zu verwenden, wie eine Ahnung, wo die Korruption passiert, als ich nicht finden können, es aus dem code. Auch ich habe versucht, den Bau der nativen Bibliotheken mit "-fstack-check-flag, aber ich könnte nicht sagen, wenn ich mehr Informationen sind im Logbuch (es scheint nicht, aber vielleicht habe ich Sie verpasst), oder ob ich andere Dinge zu tun, um Sie zu bekommen.

Auch hier ist der stack dump, kommt nach dem "GRATIS-CHECK:" Nachricht.

I/DEBUG   (12311): *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** ***
I/DEBUG   (12311): Build fingerprint: 'google/soju/crespo:2.3/GRH55/79397:user/release-keys'
I/DEBUG   (12311): pid: 12778, tid: 12907  >>> com.ntrack.tuner <<<
I/DEBUG   (12311): signal 11 (SIGSEGV), code 1 (SEGV_MAPERR), fault addr deadbaad
I/DEBUG   (12311):  r0 deadbaad  r1 45ea374c  r2 00000027  r3 00000000
I/DEBUG   (12311):  r4 00000080  r5 45ea374c  r6 8003422e  r7 45ea37b4
I/DEBUG   (12311):  r8 45da4000  r9 a811eca5  10 00100000  fp 00000001
I/DEBUG   (12311):  ip ffffffff  sp 45ea3738  lr 8000f623  pc 8000f650  cpsr 20000030
I/DEBUG   (12311):  d0  3f9664f48406d639  d1  3f8226e3e96e8495
I/DEBUG   (12311):  d2  3faba1ba1bb34201  d3  0000000000000000
I/DEBUG   (12311):  d4  3d7943379e56fd24  d5  3d8f940585cd5f95
I/DEBUG   (12311):  d6  3f2cf2145b888497  d7  3f2cf214636d85f8
I/DEBUG   (12311):  d8  0000000000000000  d9  0000000000000000
I/DEBUG   (12311):  d10 0000000000000000  d11 0000000000000000
I/DEBUG   (12311):  d12 0000000000000000  d13 0000000000000000
I/DEBUG   (12311):  d14 0000000000000000  d15 0000000000000000
I/DEBUG   (12311):  scr 20000010
I/DEBUG   (12311):

Nichts, ein Vorschlag, auf die typischen Sachen zu kontrollieren oder einfach nur die Art und Weise, um die Verwendung der malloc-debug-Informationen wäre eine große Hilfe, danke!

post code.
das wäre viel code 🙂

InformationsquelleAutor athos | 2012-07-04

Schreibe einen Kommentar