Mam grupę awarii w natywnym kodzie, które są rzadkie, ale występują konsekwentnie w przetwarzaniu SEGV_MAPERR lub SEGV_ACCERR. Te awarie są prawie zawsze zgłaszane przez Crashlytics z bardzo niską pamięcią RAM (zazwyczaj 1-5%). "Normalne" awarie (tj. Te, które zostały zdebugowane) nie mają żadnego wzorca w pamięci RAM.Czy niska pamięć może powodować błędy skrępowania w natywnym kodzie?
Czy to możliwe, że awarie są spowodowane niskim poziomem pamięci? Jaki byłby mechanizm tego? Czy istnieje sposób na stwierdzenie, czy są to awarie związane z niską pamięcią, czy błędy programowania (błędne użycie wskaźników itp.)? W wielu przypadkach zdarza się awaria w bibliotece, której nie można debugować i nie mogę replikować awarii na moich urządzeniach.
Oto niektóre z tych wypadków wyciągnąć z konsoli programisty, ponieważ daje trochę więcej szczegółów niż Crashlytics w ślad w następujących przypadkach:
********** Crash dump: **********
Build fingerprint: 'htc/a32eul_metropcs_us/htc_a32eul:5.1/LMY47O/637541.3:user/release-keys'
pid: 10902, tid: 10989, name: .xxx.xxxx >>> com.xxx.xxxxx <<<
signal 11 (SIGSEGV), code 2 (SEGV_ACCERR), fault addr 0x97f78000
Stack frame #00 pc 0004cd80 /data/app/xxx.xxx.xxxxx-1/lib/arm/libxxx.so: Routine xxxxxMixerInterleavedFloatOutput at libgcc2.c:?
********** Crash dump: **********
Build fingerprint: 'Xiaomi/land/land:6.0.1/MMB29M/V8.1.1.0.MALMIDI:user/release-keys'
pid: 2661, tid: 2746, name: .xxx.xxxx >>> com.xxx.xxxx <<<
signal 11 (SIGSEGV), code 1 (SEGV_MAPERR), fault addr 0x0
Stack frame #00 pc 00016954 /system/lib/libc.so (__memcpy_base+36)
Stack frame #01 pc 0000b14c /data/app/com.xxx.xxxx-2/lib/arm/libswresample-2.so: Routine ??
??:0
'SEG_MAPERR' zwykle jest wynikiem działania złego wskaźnika (dereferencing a NULL, użycie wiszącego wskaźnika, wypadnięcie z końca tablicy, eetc). 'SEG_ACCERR' ma tendencję do kojarzenia z próbą uzyskania dostępu do pamięci bez uprawnień (np. Zapis na stronie tylko do odczytu). O ile niska pamięć może zwiększyć prawdopodobieństwo wystąpienia takich zdarzeń, przyczyną źródłową będą złe operacje wskaźnika w kodzie. – Peter