Почему длинный файл cfc работает в CF8, а не CF9? Ошибка "Смещение цели ветвления слишком велико для короткого"

У меня довольно длинный файл cfc, длиной около 1800 строк, который отлично работал в ColdFusion 8, но после обновления моей системы разработки до ColdFusion 9 и проведения некоторого тестирования я получаю ошибку компиляции для cfc, и в сообщении говорится: "Смещение целевой ветви тоже большой для краткости ". Я изменил файл, чтобы исключить некоторые неиспользуемые функции, и консолидировал его, чтобы сделать его короче, и это решило проблему, чтобы заставить его работать. Но все же, почему он умер на мне сейчас, когда я перешел на CF9? Кто-нибудь еще сталкивался с этой проблемой в предыдущей или текущей версии ColdFusion? Есть ли какие-либо решения, кроме изменения файла cfc, такие как обновление jvm?

РЕДАКТИРОВАТЬ Если у вас есть ответ на мои вопросы, отлично! Отправьте это, но не тратьте время, рассказывая мне кое-что, что я уже знаю. Если вы собираетесь опубликовать ответ, внимательно прочитайте вопрос и отвечайте только в том случае, если вы знаете ответ. Не делайте поиск в Google и постите дерьмо, которое я уже знаю и использовал, чтобы заставить код работать. Вопрос в том, почему он работал в CF8, а теперь не в CF9? Есть ли другие решения помимо того, что я сделал?

3 ответа

Это проблема, присущая JVM, как вы уже знаете, CF9, вероятно, добавил больше врожденных функций к компоненту, и если на все методы ссылается гигантский оператор switch с коротким значением, используемым в качестве смещения, у нас меньше места для указателя смещения работать с каждой последующей версией. Люди, переходящие с CF7 на CF8, также имели такие же проблемы.

Так что короткий ответ - нет.

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

PS: этот парень сказал, что удаление транзакции помогло (CF7), но никто не оборачивает мои звонки, так что это не гарантированное исправление, я думаю, http://www.coldfusionmuse.com/index.cfm/2007/9/28/Branch.Target.Offset

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

Если вы еще этого не сделали, попробуйте запустить Анализатор кода на странице CFAdmin, "Отладка и ведение журнала> Анализатор кода". Это полезный инструмент, чтобы найти некоторые изменения, которые были сделаны в языке между CF8 и CF9.

Нам пришлось изменить несколько имен переменных и функций, так как CF добавил их в 9.

Также проверьте здесь:

http://help.adobe.com/en_US/ColdFusion/9.0/CFMLRef/WSc3ff6d0ea77859461172e0811cbec22c24-7ff0.html

Версия CF: 10 ОС: Linux CentOS 6.0

Столкнулся с подобной проблемой, когда у меня было более 1300 строк кода в моем cfc, и в один прекрасный день я получил ошибку "Смещение целевой ветви...". Я старался

  1. Анализатор кода, чтобы найти какие-либо лазейки унаследованных - НЕ ИСПРАВЛЕНО

  2. Отредактировал cfc, чтобы обрезать любой последний бит избыточного кода или комментариев - сокращено примерно на 20+ строк кода - НЕ ИСПРАВЛЕНО

  3. Я разделил код на 2 CFC и расширил один на другой - НЕ ИСПРАВЛЕНО

  4. Я удалил любой нежелательный дамп запросов и массивов (часть тестирования): ЭТО РАБОТАЕТ

поэтому я бы порекомендовал убедиться, что у вас нет дампов большого объема данных. Надеюсь это поможет.

Другие вопросы по тегам