Да, дебаггера у нас пока нет. Flex Builder тут имеет преимущество. Но работы ведутся. Разработчики плагина EcliHX для Eclipse заняты как раз дебаггером, который будет включен в этот плагин. (Пока же EcliHX имеет версию 0.0.3 и умеет только подсвечивать код, генерировать и компилировать проект).
Я сам в проектах на ActionScript2.0 использую собственное флэш-приложение — DebugConsole. Это отдельный swf-файл в отдельном окне браузера, который по LocalConnection принимает отладочные сообщения из любого (моего) флэш-приложения и отображает их всякими продвинутыми способами:
К сожалению, этот инструмент закрытый и распростронению не подлежит. Впрочем, он уже потерял свою актуальность для ActionScript-программистов в связи с наличием полноценного дебаггера во FlexBuilder. Для haXe он бы пригодился, но я не спешу портировать его с ActionScript, потому что надеюсь, что дебаггер все-таки скоро появится.
В ближайшее время хочу попробовать другой способ — сделать на Ruby простенький дебаг-сервер. Он будет открывать и слушать какой-нибудь порт, и все, что в него приходит, писать в консоль. Из флэшки я будут коннектиться на тот же порт с помошью XMLSocket и посылать в него отладочные сообщения. Как только это получится, выложу тут свое решение. (Буду делать под Linux, но поскольку Ruby мультиплатформенный, то должно работать и под Windows).
В общем, пока пользуемся простыми средствами — функцией trace. У нас эта функция будет помощнее, чем во Flash IDE.
Отличия от функции trace в ActionScript2.0
По умолчанию функция trace в haXe создает во флешке текстовое поле поверх всего остального контента и направляет сообщения в него. Это, конечно, не совсем удобно, но такое поведение можно переопределить.
На самом деле функция trace в haXe является оболочкой для низкоуровневых функций, специфичных для каждой платформы (Flash, JavaScript, Neko). Есть еще одна версия этой функции в классе haxe.Log, которая может принимать дополнительные параметры. Плюс, этот класс имеет еще парочку полезных функций:
Функция haxe.Log.trace первым параметром принимает инфу, которую нужно отобразить. Параметр типизирован как Dynamic, так что можно передавать что угодно. trace попытается сгенерировать наиболее информативное представление, если будет передан объект. Если объект имеет метод toString(), то этот метод и будет использован (поэтому рекомендуется определять toString() в каждом классе).
Вторым параметром функция принимает объект, указывающий на позицию в коде, имеющий тип haxe.PosInfos
Ниже идет пример кода из книги "Professional haXe and Neko". Он демонстрирует, как можно переопределить фукнцию trace, чтобы реализовать какой-либо собственный способ отображения инфы.
И напоследок — очень полезный парамет компилятора --no-traces. В больших приложениях вызовов trace может быть очень много, что добавляет лишние байты к результирующему swf-файлу, а при работе флэш-приложения создает дополнительную нагрузку на процессор. Поэтому релиз-версию приложения нужно компилировать с данной опцией. Тогда компилятор удалит из кода все вызовы trace (правда если вызывается непосредственно haxe.Log.trace, то такие вызовы будут оставлены).