странное падение iphone на устройстве, но не видно в симуляторе - PullRequest
0 голосов
/ 09 февраля 2010

Я попытался установить и запустить одно из моих приложений на устройстве. На симуляторе все работало нормально. Но однажды на устройстве он как-то вылетает. Я пытался отладить, но я ничего не мог получить там. Вот что показывает консоль отладчика .. Может кто-нибудь, пожалуйста, помогите мне с этим ..: Вот журнал отладчика:

Program received signal EXC_BAD_ACCESS, Could not access memory.`
`Reason: KERN_PROTECTION_FAILURE at address: 0x00000000`
`[Switching to thread 12291]`
`0x327083e0 in _objc_selopt_data ()`
`Program received signal:  “EXC_BAD_ACCESS”.`

`Unable to disassemble _objc_selopt_data.`
(gdb) bt`
`#0  0x327083e0 in _objc_selopt_data ()`
`#1  0x32fb93c0 in WebCore::FrameLoader::detachFromParent ()`
`#2  0x303e1aec in -[WebView(WebPrivate) _close] ()`
`#3  0x303e19d8 in -[WebView close] ()`
`#4  0x303e1940 in -[WebView dealloc] ()`
`#5  0x32d86640 in -[NSObject release] ()`
`#6  0x32f4a294 in WebCoreObjCDeallocOnWebThreadImpl ()`
`#7  0x32f8b9c4 in HandleWebThreadReleaseSource ()`
`#8  0x32da43a6 in CFRunLoopRunSpecific ()`
`#9  0x32da3c1e in CFRunLoopRunInMode ()`
`#10 0x32f486f8 in RunWebThread ()`
`#11 0x327587b8 in _pthread_body ()`
`#12 0x00000000 in ?? ()`
`(gdb) `

Ответы [ 2 ]

0 голосов
/ 09 февраля 2010

Я не уверен, связано ли это или нет, но однажды я столкнулся с подобной проблемой. IPhone вызывает предупреждение памяти, потому что ему не хватило оперативной памяти. Таким образом, время от времени iPhone сбрасывает кешированную память, что может привести к тому, что некоторые виды или объекты будут освобождены / освобождены неосознанно по вашему усмотрению. Симулятор iPhone никогда не вызовет предупреждение о памяти, но на реальной машине это то, что происходит.

Я не уверен, так ли это, но, пожалуйста, попробуйте сделать это: на симуляторе iPhone есть опция «Имитация предупреждения о памяти». Попробуйте поиграть с вашим приложением на симуляторе и иногда пытаться "симулировать предупреждение памяти". В случае сбоя мы можем сделать вывод, что это так.

Сначала проверьте, так ли это.

В качестве альтернативы, если вы хотите проверить, когда реальный iPhone вызывает «предупреждение о памяти», попробуйте добавить NSLog или printf следующим способом:

- (void)didReceiveMemoryWarning {
  [super didReceiveMemoryWarning]; 
}
0 голосов
/ 09 февраля 2010

Вы удаляете объект, который уже был уничтожен?

...