странная ошибка GDB не может отследить - PullRequest
3 голосов
/ 26 мая 2010

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

2 голосов
/ 26 мая 2010

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

(gdb) info malloc 0x911c2a0

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

0 голосов
/ 28 июня 2010

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

0 голосов
/ 26 мая 2010

Попробуйте отладку с NSZombieEnabled, установленным в исполняемую среду YES:

Для активации 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]
0 голосов
/ 26 мая 2010

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

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

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

...