В наших данных Crashlytics мы видим множество отчетов со старых устройств, как показано ниже.Наше приложение, похоже, аварийно завершает работу, когда система отправляется на очистку памяти.
Приложение содержит собственный код, который malloc()
s в куче.Ревизия каждой строки вручную невозможна.У нас нет доступа ко всему исходному коду, а база кода велика.
В настоящее время у нас нет известного способа воспроизвести это «в лаборатории».У нас есть только эти загадочные следы.
...
# OS Version: 5.0
# Device: Galaxy Note3
# RAM Free: 4.2%
# Disk Free: 34.8%
#0. Crashed: .our.app.id|
0 libart.so 0xb4d24180 (Missing)
1 libart.so 0xb4d244b7 art::gc::collector::MarkSweep::ProcessMarkStack(bool)
2 libart.so 0xb4d2454d art::gc::collector::MarkSweep::MarkReachableObjects()
3 libart.so 0xb4d25491 art::gc::collector::MarkSweep::MarkingPhase()
4 libart.so 0xb4d255bf art::gc::collector::MarkSweep::RunPhases()
5 libart.so 0xb4d1ca87 art::gc::collector::GarbageCollector::Run(art::gc::GcCause, bool)
6 libart.so 0xb4d3c43b art::gc::Heap::CollectGarbageInternal(art::gc::collector::GcType, art::gc::GcCause, bool)
7 libart.so 0xb4d3d881 art::gc::Heap::ConcurrentGC(art::Thread*)
8 boot.oat 0x745b23db (Missing)
Я ищу советы о том, как подойти / отладить эту аварию.Что вызывает этот след?Какие шаги я могу предпринять, чтобы воспроизвести это локально?Что делает сборщик мусора несчастным?