Отладка XCode 4.2 в viewDidLoad или viewDidDisappear завершится в EXC_BAD_ACCESS - PullRequest
3 голосов
/ 14 октября 2011

Отладка XCode 4.2 на viewDidLoad или viewDidDisappear завершится на EXC_BAD_ACCESS

Он прерывается на этой точке останова, но при продолжении («Продолжить выполнение программы») возвращает: EXC_BAD_ACCESS (код= 1, адрес = 0x ....) в потоке 1 (начало 0).Этого не случалось в более ранних версиях.

Кто-то получал ту же ошибку?Кто-нибудь знает, как с этим бороться?

Спасибо !!

Код для примера будет простым:

 - (void) viewDidDisappear:(BOOL)animated {  
       [super viewDidDisappear:animated];
        NSLog(@"View did dissapear");    
    }

При отладке на точке останова (строка с NSLog) она, а затем нажатие на продолжение, будетконец на этом EXC_BAD_ACCESS.Если нет точки останова, то все работает нормально.

Я работаю с XCode 4.2 Build 4D199 (OS X Lion 10.7.2).Использование отладчика LLDB.

ОБНОВЛЕНИЕ: поставить разрыв во всех исключениях, и оно всегда заканчивается в потоке 8: EXC_BAD_ACCESS - 0x1f43: movl (% ebx),% eax - строка 0: начало ....

ОБНОВЛЕНИЕ 2: поиграл с XCode, и я действительно не знаю почему, но знаю, что это работает.Код не изменился ... хм ... странно ...

Ответы [ 5 ]

1 голос
/ 08 марта 2012

Я получал ту же ошибку на viewDidDisappear: animated - оказалось, что у меня была опечатка, вызывающая [ self viewDidDisappear: animated]; вместо [ супер viewDidDisappear: анимированный];

Простое исправление, но поначалу не очень заметное. Я был удивлен, что это не дало мне предупреждение.

1 голос
/ 14 октября 2011

Вы мало помогаете с предоставленным вами кодом.

установить malloc_error_break и включить зомби и посмотреть, приведет ли это к чему-то

1 голос
/ 14 октября 2011

Вы должны всегда вызывать super в какой-то момент во всех переопределенных методах viewWill... или viewDid....Например,

- (void) viewDidDisappear:(BOOL)animated {
        NSLog(@"View did disapear");
        [super viewDidDisappear:animated];
}
1 голос
/ 14 октября 2011

Если вы переопределите этот метод, вы должны вызвать super в какой-то момент вашей реализации.

Это из документа, я не знаю, является ли проблема причиной вашего BADACCES, но это по крайней мере то, что вы должны исправить.

0 голосов
/ 15 декабря 2011

Я вижу здесь немного другую проблему. В моем случае (SnowLeopard 10.6.8, XCode 4.2, LLVM 3.0) он останавливается в точке торможения, но XCode не отображает никакой информации об отладке. Я могу видеть мой стек в GDB нормально, но локальные значения испорчены. Интересно, что я пытался использовать performSelectorOnMainThread:, он может восстановить функции отладки XCode, но что-то портит значения активного кадра.

- (void)viewDidDisappear:(BOOL)animated {
    [super viewDidDisappear:animated];
        [self performSelectorOnMainThread:@selector(_destroyMarketBrowser) withObject:nil waitUntilDone:YES];

}

Кстати: в симуляторе все работает нормально, проблема возникает только на реальных устройствах (5.0.1 или 5.1 Beta2)

...