- Сообщений: 247
- Спасибо получено: 537
Debugger
Сразу расскажу немного о принципе - руби со своим метопрограммированием на голову выше всех языков, с которыми я сталкивался. В основе дебаггера две вещи - binding и eval.
Binding - это считай окружение, он содержит все все все переменные, методы, константы конкретного участка кода. Грубо говоря, находясь в класс Actor на xxx сточке, в методе, в цикле, в блоке вы можете вызвать binding который будет слепком этого самого места. (Я бы наверное сам бы не понял, если бы не знал что такое binding и прочитал такое объяснение, но лучше я не могу
Kernel#eval - метод, позволяющий исполнить строку, как будто в ней код.
Код можно скачать перейдя по этой длинной ссылке . Он пока что плохо прокомментирован, буду исправлять в процессе использования.
Как пользоваться дебаггером:
1) создайте папку lib (или как хотите назовите) в проекте
2) загрузите туда все файлы дебаггера
3) вставте этот скрипт в проект (или прочитайте статью про внешние гемы и напишите свой, только учтите что этот скрипт загрузит консоль и в проекте, в пути к которому есть не ASCII символы) желательно до всех ваших скриптов.
Я часто модифицирую код загрузчика, так что актуальную версию можно взять по этой длинной ссылке
Добавте код загрузчика в скрипты, а затем этот код
4) В игре [strike](в битве пока что не работает)[/strike] уже работает, с запущенной консолью нажимаем F5 - в консоли появится приветствие. Вы можете исполнить любой руби код в контексте приложения.
Немножко кастылей. Консоль поддерижвает мультистрочность команд, т.е. это будет работать:
И напоследок - баги точно будут, ошибки - тоже будут, считайте что это альфа версия. Пишите сюда о ошибках, или что вам нравится \ не нравится, буду дописывать. Всем удачи!
Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.
Я пишу скрипты на другой версии мейкера, в которой консоли нет. Можно ли как-то модифицировать код, чтобы вывод информации производился в какой-нибудь файл лога? Без eval переживу, а вот binding заинтересовал и хотелось бы выводить его в файл.
Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.
Я заюзал win32api для того чтобы получить доступ к окошку консоли игры (потому что оно уже было и туда идет STDOUT), теоретически я могу и новое окошко создать, независимое от игры вообще. Будут пробовать, отпишу о результатах.
Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.
К сожалению, подключение аналогичного окошка к XP приводит к перегрузке стека (имеется ввиду Console Script от ForeverZer0), так что я как раз на файлы рассчитываю.
Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.
Первое что ввел в консоли "help"
))) Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.
К сожалению это не irb и команды help тут нет (да и в irb она особо мало чем может помочь), пиши лучше сюда что именно тебе нужно?Lipton пишет: В моем случае, что бы нормально заработал проект с этим скриптом, потребовалось изменить путь к проекту, то есть что бы в пути не было русских букв. Иначе при старте вываливалось с ошибкой кодировки.
Первое что ввел в консоли "help")))
Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.
Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.
Заглянул в документацию руби по классу Encoding , задумался. Ты уверен что тебе нужно использовать этот класс или мне нужно просто пофиксить баг с кирилицей в пути к проекту?DeadElf79 пишет: Кстати, в руби-то это можно сделать, но вот в мейкерском руби не пробовал - можно ли использовать Encoding?) Было бы весьма удобно.
Я просто юзаю в основном Ubuntu для работы (там всегда unicode), и почти всегда именую папку латницей, так что даже и не подумал про такие возможные проблемы, сори. Как доберусь домой - разберусь
Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.
Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.
* - как я понял это не до конца введенная команда.
clear_eval меня спасает.

А так работает не плохо. Можно посмотреть содержимое всяких переменных и даже что-нибудь изменить на лету.
Хотелось бы видеть точку входу, при входе по брейк поинту. Что нибудь в стиле "Input class Game_Message def all_text" не знаю реально ли это.
)) Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.
Prompt - это приглашение консоли ввести что нибудь.
> - означает "введите руби код который я с радостью для вас иполню"
Юзер вводит рубикод, он исполняется, результат возращается с символом => (это общепринятое обозначения для результата в руби)
Как это работает, юзер вводит что то типа
Юзер дописывает:
Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.
Дебаггер должен сам переводить фокус на окно с игрой, после ввода команды exit. Если он так не делает - это багDeadElf79 пишет:
дебаггер не перезапускается после выхода из него(нужно было выделить окно с игрой, да)
Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.
Ого)) видимо ты и исполнять код вслепую сможешь, нужно добавить переключатель внутри вкл \ выклDeadElf79 пишет: если находиться в консоли после выхода из дебаггера и заново запустить его, то в строке ввода появляются все символы, которые ты вводил "вслепую", пока дебаггер был выключен О.о
Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.
Все правильно, в руби любое выражение что то да возращает
Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.
Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.
Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.
ладно, это сложно и не нужно, согласен. лучше придумать другой выход из этой ошибки.
Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.
