Я получаю эту странную ошибку в 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)
Вы можете попробовать следующее, чтобы увидеть, где был размещен неисправный CALayer:
(gdb) info malloc 0x911c2a0
Я не знаю, хорошо ли gdb играет с объектами зомби, но очевидно, что у него есть некоторые ограничения.
gdb
У меня есть решение проблемы. Проблема была из-за представления контроллера. Контроллер представления был освобожден, а затем после вызова метода. Но странный GDB не показал ничего о выпуске viewController .... Не помог ни один из способов включения NSZombie.
Попробуйте отладку с NSZombieEnabled, установленным в исполняемую среду YES:
NSZombieEnabled
Для активации NSZombieEnabled Объект в вашей заявке: Выберите Проект> Редактировать Актив Исполняемый файл, чтобы открыть исполняемую информацию окно. Нажмите Аргументы. Нажмите добавить (+) в «Переменные, которые нужно установить» в окружающей среде ». Войти NSZombieEnabled в столбце Имя и ДА в столбце Значение. Удостовериться что галочка для NSZombieEnabled запись выбрана.
Для активации NSZombieEnabled Объект в вашей заявке:
Выберите Проект> Редактировать Актив Исполняемый файл, чтобы открыть исполняемую информацию окно. Нажмите Аргументы. Нажмите добавить (+) в «Переменные, которые нужно установить» в окружающей среде ». Войти NSZombieEnabled в столбце Имя и ДА в столбце Значение. Удостовериться что галочка для 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]
Очевидно, у вас ошибка управления памятью.
И вы не отслеживаете точную линию вообще. Чтобы получить трассировку стека, введите bt или просто загляните в окно отладчика (Run & rarr; Debugger).
bt
(po означает «Распечатать объект Objective-C». Поскольку этот конкретный экземпляр был освобожден, po -ing вызовет дальнейшую ошибку.)
po