XCode для ошибки iPhone EXC_BAD_ACCESS только происходит при продвижении через отладчик?

Я работаю над проектом в XCode для iPhone, где я получаю ошибку EXC_BAD_ACCESS, ОДНАКО я только получаю ошибку при продвижении через функцию, которую я пытаюсь отладить. Когда я беру свою точку останова от функции, но все еще выполняю проект в Режиме отладки, я никогда не получаю эту ошибку. Должен там так или иначе решить это или узнать то, что вызывает ошибку EXC_BAD_ACCESS.

Ошибка прибывает в строку: for ( BEUCharacterAIBehavior *behavior in behavior_.behaviors )

Однако при продвижении через значение behavior_. поведения выделяются и сохраняются. NSZombiesEnabled установлен, но все еще получите загадочное сообщение об ошибке.

Код:

-(BEUCharacterAIBehavior *)getHighestValueBehaviorFromBehavior:(BEUCharacterAIBehavior *)behavior_ {
//if the behavior is a leaf then stop checking because there are no sub behaviors
if([behavior_ isLeaf]) return behavior_;


//temp variable for highest value behavior so far
BEUCharacterAIBehavior *highest = nil;
//NSLog(@"BEHAVIORS:%@",behavior_.behaviors);
for ( BEUCharacterAIBehavior *behavior in behavior_.behaviors )
{

    //if there is a highest value behavior check if the highest value behavior has a larger value than the new one
    if(highest)
    {
        if(highest.lastValue > behavior.value) continue;
    }

    //if there is no current behavior then the highest is now the behavior were checking because we have nothing to check against
    if(!currentBehavior) highest = behavior;
    //Make sure the current behavior is not the same behavior as the new one
    else if(currentBehavior != behavior)
    {
        //can the new behaviors parent run multiple times in a row
        if(!behavior.parent.canRunMultipleTimesInARow)
        {
            //make sure the current and new behaviors parents arent the same if they are continue to next behavior
            if(currentBehavior.parent != behavior.parent)
            {
                continue;
            }
        }

        highest = behavior;
        //If current behavior and new behavior are the same make sure they can run multiple times
    } else if(currentBehavior.canRunMultipleTimesInARow)
    {
        highest = currentBehavior;
    }
}
//NSLog(@"GOING TO GET HIGHEST VALUE BEHAVIOR FROM BEHAVIOR: %d",highest.retainCount);
if(!highest) return nil;
return [self getHighestValueBehaviorFromBehavior:highest];//highest;

}

Стек Error

0 0x02aebdcb в object_getClass
1 0x00002ac0 в
2 0x00014bb9 в - [BEUCharacterAI getHighestValueBehaviorFromBehavior:] в BEUCharacterAI.m:115
3 0x00014b6b в - [BEUCharacterAI getHighestValueBehavior] в BEUCharacterAI.m:103
4 0x00014904 в - [Обновление BEUCharacterAI:] в BEUCharacterAI.m:68
5 0x00008975 в - [Шаг BEUCharacter:] в BEUCharacter.m:229
6 0x00022aeb в - [Шаг EskimoCharacter:] в EskimoCharacter.m:28
7 0x0000ed2b в - [Шаг BEUObjectController:] в BEUObjectController.m:381
8 0x00003651 в - [Шаг BEUGame:] в BEUGame.m:63
9 0x0007cc42 в - [Огонь CCTimer:] в CCScheduler.m:87
10 0x0007d846 в - [Галочка CCScheduler:] в CCScheduler.m:212
11 0x000500b3 в - [CCDirector mainLoop] в CCDirector.m:208
12 0x000532b3 в - [CCDisplayLinkDirector preMainLoop:] в CCDirector.m:1055
13 0x00796f06 в CA:: Дисплей:: DisplayLink:: отправка
14 0x0079704b в CA:: Дисплей:: EmulatorDisplayLink:: обратный вызов
15 0x029810f3 в CFRUNLOOP_IS_CALLING_OUT_TO_A_TIMER_CALLBACK_FUNCTION
16 0x02982734 в __ CFRunLoopDoTimer
17 0x028df689 в __ CFRunLoopRun
18 0x028dec00 в CFRunLoopRunSpecific
19 0x028deb21 в CFRunLoopRunInMode
20 0x03e96378 в GSEventRunModal
21 0x03e9643d в GSEventRun
22 0x0083bf89 в UIApplicationMain
23 0x00002b50 в основном в основном m:13

6
задан Chris M 16 May 2010 в 18:29
поделиться

2 ответа

Мне не сразу понятно, в чем ваша проблема, но этот документ может помочь:

Магия отладки Mac OS X

1
ответ дан 17 December 2019 в 02:25
поделиться

У вас работают другие потоки? Возможно, что-то еще изменяет поведение_.поведение или просто поведение_ во время выполнения цикла, но окно довольно маленькое, если цикл не выполняется очень медленно. Вы можете попробовать поместить в цикл длительный сон, чтобы имитировать отладку, и посмотреть, не приведет ли это к сбою при работе вне отладчика.

1
ответ дан 17 December 2019 в 02:25
поделиться
Другие вопросы по тегам:

Похожие вопросы: