2016-10-31 2 views
3

Я работаю над игрой, и все было хорошо, пока я не добавил некоторые функции. Я работал около месяца на этих функциях, и, к сожалению, я не был достаточно мудр, чтобы тестировать более мелкие части кода, поэтому я добавил много кодов, и теперь я получаю эту ошибку.Как отладить исключение переполнения стека?

Unhandled exception at 0x77555098 (ntdll.dll) in SFML setup.exe: 0xC00000FD: Stack overflow (parameters: 0x00000001, 0x006D2FA8). 

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

void SceneNode::onCommand(const Command &command, sf::Time dt) 
{ 
    if (command.category.at(getCategory())) 
     command.action(*this, dt); 

    for(const Ptr& child : mChild) 
    { 
     child->onCommand(command, dt); 
    } 
} 

SceneNode - это древовидная структура и имеет некоторый ребенок. эта функция пытается выполнить итерацию по дереву, чтобы увидеть, какие узлы могут принимать определенную команду.

+2

Первая ул ep: Какая из следующих возможностей применима? a) Ребенок узла X (или дочерний элемент дочернего элемента ... X) является самим X. b) В некоторых ошибках кода вставлено большое количество вложенных детей, но дети не должны существовать. c) Данные в порядке, и стек действительно слишком мал. – deviantfan

+1

Первичные подозреваемые: 'command.action (* this, dt);' вызывает эту функцию, или 'this' является элементом' mChild'. Посмотрите на указатель 'this' в стеке вызовов в вашем отладчике, чтобы узнать, есть ли цикл в дереве узлов. – molbdnilo

+0

Невозможно ответить на этот вопрос на основе предоставленной информации. Просьба представить минимальный рабочий пример, демонстрирующий ошибку. Создание минимального рабочего примера обычно помогает определить проблему. –

ответ

0

Ответы на вопрос: «Как отладить исключение переполнения стека?».
1- Ошибка воспроизводимая? если да, то идти вперед
2- Attach/открыть процесс с WinDbg (или OllyDbg или любой другой)
3- Триггер ваше исключение
4- См содержание регистра (в частности, (для 32 бит) eip, ebp)
5- свалка esp для того, чтобы проверить кадр стека
Это должно быть, как:

{ Local Var -> Saved EBP -> Saved EIP -> Params -> Address of Exception Handler } 

Вы можете найти действительно хорошие и подробные объяснения по этому link

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