Странная ошибка GDB не может отследить
Я получаю эту странную ошибку в GDB, и я не могу отследить точную строку кода для отслеживания ошибки. Кто-нибудь знает об этом типе ошибки? Вот что я получаю в GDB
*** -[CALayer sublayers]: message sent to deallocated instance 0x911c2a0
(gdb) po 0x911c2a0
Program received signal SIGTRAP, Trace/breakpoint trap.
0x020993a7 in ___forwarding___ ()
The program being debugged was signaled while in a function called from GDB.
GDB has restored the context to what it was before the call.
To change this behavior use "set unwindonsignal off"
Evaluation of the expression containing the function (_NSPrintForDebugger) will be abandoned.
(gdb) info symbol 0x911c2a0
No symbol matches 0x911c2a0.
(gdb)
4 ответа
У меня есть решение проблемы. Проблема была из-за просмотра контроллера. Контроллер представления был освобожден, а затем после вызова метода. Но странный GDB не показал ничего о выпуске view Controller.... Не помог ни тот, ни другой способ включения NSZombie.
Вы можете попробовать следующее, чтобы увидеть, где был размещен неисправный CALayer:
(gdb) info malloc 0x911c2a0
Я не знаю, если gdb
хорошо играет с объектами зомби, но очевидно, что у него есть некоторые ограничения.
У вас есть ошибка управления памятью, очевидно.
И вы не отслеживаете точную линию вообще. Чтобы получить трассировку стека, введите bt
или просто загляните в окно отладчика (Run → Debugger).
(po
означает "Распечатать объект Objective-C". Поскольку этот конкретный экземпляр был освобожден, po
-ing вызовет дальнейшую ошибку.)
Попробуйте отладить с NSZombieEnabled
установить в YES исполняемую среду:
Чтобы активировать функцию NSZombieEnabled в вашем приложении:
Выберите "Проект"> "Редактировать активный исполняемый файл", чтобы открыть окно информации о исполняемом файле. Нажмите Аргументы. Нажмите кнопку добавления (+) в разделе "Переменные, которые должны быть установлены в среде". Введите NSZombieEnabled в столбце Имя и YES в столбце Значение. Убедитесь, что установлен флажок для записи NSZombieEnabled.
Вы также можете добавить пару точек останова, чтобы облегчить их отладку:
fb -[_NSZombie init]
fb -[_NSZombie retainCount]
fb -[_NSZombie retain]
fb -[_NSZombie release]
fb -[_NSZombie autorelease]
fb -[_NSZombie methodSignatureForSelector:]
fb -[_NSZombie respondsToSelector:]
fb -[_NSZombie forwardInvocation:]
fb -[_NSZombie class]
fb -[_NSZombie dealloc]