Почему я получаю переполнение стека (ошибка 1024) при сборке выпуска?

#actionscript-3 #debugging #actionscript #flexbuilder #stackunderflow

#actionscript-3 #отладка #actionscript #flexbuilder #stackunderflow

Вопрос:

У меня была эта странная проблема с ошибками переполнения стека, которые возникают только при сборке выпуска проекта Flex Builder. Я просмотрел Интернет, чтобы найти решение, но, хотя я нашел несколько связанных сообщений, мне ничего не помогло. Итак, вот этот вопрос и мое решение в ответах, чтобы он, надеюсь, помог другим людям.

Проблема: я портировал Java-программу (игру) на flex, и она отлично работает в режиме отладки на Android, в Интернете и Playbook. Однако, когда я создаю релизную версию игры, она вылетает. Согласно документации Adobe, сообщается об ошибке 1024, т. Е. Переполнение стека.

Сначала я думал, что проблема ограничивается только Playbook, но нет, точно такая же проблема возникает в одном и том же месте в веб-браузере и Android. Из вставленной мной отладочной информации я обнаружил, что исключение, похоже, генерируется во время вызова другой функции.

Ответ №1:

Чтобы решить проблему, я разбил нарушающую функцию на множество отдельных функций и таким образом сузил, какая именно часть кода вызывает проблему. Это привело меня к нескольким строкам кода, в которых был следующий вызов (в try-catch):

 trace(e.getStackTrace())()
 

Хммм, это, по-видимому, было вызвано регулярным выражением, которое я использовал для рефакторинга с Java на Actionscript. Удаление extra () решает проблему.

Это то, что я хотел, чтобы компилятор перехватывал, вместо того, чтобы допускать сбой только при выпуске, когда функция, содержащая код-нарушитель, помещается в стек.

Комментарии:

1. Интересно, я думал, что возвращаемый тип из trace был void . Я бы предположил, что вы получите другую ошибку при попытке вызвать void(). Классный улов.