перевыпуск без calltrace (с использованием ARC), плохой доступ в основной - PullRequest
2 голосов
/ 18 августа 2011

Я недавно перешел на использование ARC.Тем не менее, у меня сейчас странный сбой, и аварийные журналы действительно бесполезны.Во время одного из процессов инициализации моего приложения (получение данных с сервера, его анализ, настройка представлений) я получаю bad_access.Это журнал ошибок с устройства:

    Incident Identifier: 7CE05452-7C5D-424A-8529-AE7B17C9FEBC
CrashReporter Key:   b743ede30ce737293cf7444f67bb8a7b590c2fd9
Hardware Model:      iPhone3,1
Process:         BoreBeta [231]
Path:            /var/mobile/Applications/52A15437-459A-4160-95C4-BF5DF5C98C15/BoreBeta.app/BoreBeta
Identifier:      BoreBeta
Version:         ??? (???)
Code Type:       ARM (Native)
Parent Process:  launchd [1]

Date/Time:       2011-08-18 14:53:41.800 +0200
OS Version:      iPhone OS 5.0 (9A5288d)
Report Version:  104

Exception Type:  EXC_BAD_ACCESS (SIGSEGV)
Exception Codes: KERN_INVALID_ADDRESS at 0x80000004
Crashed Thread:  0

Thread 0 name:  Dispatch queue: com.apple.main-thread
Thread 0 Crashed:
0   CoreFoundation                  0x3758e380 CFRelease + 28
1   CoreFoundation                  0x375a93ec -[__NSArrayM dealloc] + 116
2   libobjc.A.dylib                 0x30a4e0be _objc_rootRelease + 30
3   libobjc.A.dylib                 0x30a4fdb0 objc_release + 32
4   libobjc.A.dylib                 0x30a4ee06 (anonymous namespace)::AutoreleasePoolPage::pop(void*) + 218
5   libobjc.A.dylib                 0x30a4ed22 _objc_autoreleasePoolPop + 6
6   CoreFoundation                  0x3759f050 _CFAutoreleasePoolPop + 12
7   Foundation                      0x337cd460 -[NSAutoreleasePool release] + 120
8   UIKit                           0x33b8d948 _UIApplicationHandleEvent + 6664
9   GraphicsServices                0x30ff8ef4 PurpleEventCallback + 876
10  CoreFoundation                  0x3760a9c4 __CFRUNLOOP_IS_CALLING_OUT_TO_A_SOURCE1_PERFORM_FUNCTION__ + 32
11  CoreFoundation                  0x3760a966 __CFRunLoopDoSource1 + 134
12  CoreFoundation                  0x3760958c __CFRunLoopRun + 1364
13  CoreFoundation                  0x375ab036 CFRunLoopRunSpecific + 294
14  CoreFoundation                  0x375aaefe CFRunLoopRunInMode + 98
15  UIKit                           0x33b8b758 -[UIApplication _run] + 544
16  UIKit                           0x33b8898a UIApplicationMain + 1074
17  BoreBeta                        0x00002d8a main (main.m:14)
18  BoreBeta                        0x000027f8 start + 32

Thread 1 name:  Dispatch queue: com.apple.libdispatch-manager
Thread 1:
0   libsystem_kernel.dylib          0x3140d214 kevent + 24
1   libdispatch.dylib               0x376aaf60 _dispatch_mgr_invoke + 708
2   libdispatch.dylib               0x376aac7e _dispatch_mgr_thread + 30

Etcetera, я считаю, что это единственная полезная часть.Когда я позволяю ему аварийно завершить работу в XCode, я вижу, что он падает в main, и я не вижу никакой calltrace, кроме main, UIApplicationMain и CFRelease сверху.будет просматривать мой код для перевыпуска объектов, но я сомневаюсь, что это так, потому что я сейчас использую ARC.Как вы исправляете подобные ошибки?

Редактировать: код для анализа данных находится в отдельном потоке с использованием GCD, и именно там живет мой единственный @autoreleasepool.

Кроме того, при работе с NSZombieEnabled я получаю вызов релиза NSArrayM.К сожалению, это то же самое, что мы читаем в журнале сбоев, так что, боюсь, здесь пока нет реального прогресса ...

Редактировать: ОК.Как только я исправил все мои другие ошибки памяти без ARC, я получил эту ошибку еще раз.Так что, очевидно, это не связано с ARC ...

Ответы [ 3 ]

5 голосов
/ 18 августа 2011

Известная ошибка, появившаяся сравнительно недавно.

Исправлено в будущем выпуске (обратите внимание, что Xcode 4.2 находится под NDA, но llvm-commits - нет). Сообщение коммита доступно здесь . Сообщение фиксации немного расплывчато, но оно должно охватывать тот случай, который вы видите - если это не так при следующем выпуске компилятора (или вы можете создать его самостоятельно, если это так мотивировано), пожалуйста, немедленно сообщите об ошибке и опубликуйте ошибка # здесь.

1 голос
/ 18 августа 2011

Вы только что недавно обновились до Xcode 4.2 beta 5?Это, кажется, вызывает некоторые случайные проблемы с ARC, например, мы очень похожи на сбой, и нам пришлось вернуться к 4.2 beta 4.

Более подробную информацию можно найти на форумах разработчиков Apple.

0 голосов
/ 10 января 2013

Я также получаю это, когда не удается вернуть объект в методе, который имеет тип возврата.Когда метод завершается, он вызывает EXC_BAD_ACCESS в objc_release.

...