2010-05-26 5 views
3

Я получаю эту странную ошибку в 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) 

ответ

0

У меня есть решение проблемы. Проблема была связана с контроллером вида. Контроллер представления был освобожден, а затем после вызова метода. Но странный gdb ничего не показывал о viewController relese .... Ни один из них не помог NSZombie.

0

У вас есть ошибка управления памятью, очевидно.

И вы не отслеживаете точную линию вообще. Чтобы получить трассировку стека, введите bt или просто загляните в окно отладчика (запустите → Debugger).

(po означает «объект печати Objective-C» Так как этот конкретный экземпляр был освобожден, po -ную будет вызывать дальнейшую ошибку..)

0

Попытка отладки с NSZombieEnabled значение Да исполняемый среды:

для активации объекта NSZombieEnabled в приложении:

Выберите Project> Edit Активный исполняемый файл, чтобы открыть исполняемый файл Информация окно. Нажмите «Аргументы». Нажмите кнопку «Добавить (+)» в «Переменные, которые должны быть установлены в разделе« Окружающая среда ». Введите 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] 
+0

Я уже добавил NSZombieEnabled в переменные окружения и установил его в YES. Где я могу добавить эти точки останова? fb - [_ NSZombie init] fb - [_ NSZombie retainCount] –

+0

Это будущие точки останова (точки останова кода, которые еще не загружены). Вы можете добавить их в ~/.gdbinit. См. Http://nslog.de/posts/46 для списка всех материалов, которые я бы рекомендовал разместить там. – stigi

2

Вы можете попробовать следующее, чтобы увидеть, где был выделен неисправным CALayer:

(gdb) info malloc 0x911c2a0 

Я не знаю, хорошо ли работает gdb с объектами зомби, но, похоже, кажется, что у него есть некоторые ограничения.

+0

полезная информация! благодаря – windson

Смежные вопросы