Debugger

Программист Ruby Коммерсант Проект года 1 место Учитель Проект месяца 1 место
Больше
11 года 8 мес. назад #72703 от Iren_Rin
Iren_Rin ответил в теме Debugger
Так и не удалось починить кодировку пути к проекту, потому что в игре вырезаны почти все кодировки, кроме utf-8 и ANSII-8BIT. 12cp1 нету :( Надеюсь мне не придется в итоге писать класс кодировки. Так что печально, но факт - подключение скриптов из вне пока что работает только для проекта, путь к которому задан полностью в ANSII-8BIT символах. Я понимаю, что конечного игрока не заставишь сохранить проект не там, где он хочет, так что постараюсь это как нибудь пофиксить.
Еще узнал что код не исполняется в неактивной консоли, строчки, которые вы ввели сохраняются в буфере винды, а потом передаются на STDIN консоли, когда она становится активна. И с этим я могу бороться только очень грязными способами, так что пусть пока остается как есть.
Я добавил отображение класса и метода, где был установлен break point. Имя файла оказался бесполезным, в случае с внутренними скриптами.
Спасибо сказали: Lipton

Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.

Программист Ruby Коммерсант Проект года 1 место Учитель Проект месяца 1 место
Больше
11 года 8 мес. назад - 11 года 8 мес. назад #72815 от Iren_Rin
Iren_Rin ответил в теме Debugger
К сожалению решить наскоком проблему с кодировкой пути к проекту не удалось. Поэтому как временное решение для таких проектов предлагаю загружать консоль в проект по старинке - вставив скрипт. в этом большом файле сгружены все файлы, и пропущены require команды. Просто вставьте этот скрипт и все должно работать без проблем.

Так же добавил возможность выводить переменные из binding в файл. Это будет работать только в том случае, если ваш проект сохранен в папке, в пути к которой нет кириллицы (не ANSII символов). Функционал получился очень и очень странным, все же нужно сделать нормальную консоль для XP. Запись ведется по умолчанию в файл debugger.txt в корне проекта.
Code:
Debugger.render binding #загрузить локальные переменные и переменные объекта Debugger.render binding, true #загрузить то же, что и сверху, плюс константы, которых может быть много
Файл дописывается, старый текст не стирается, чтобы не потерять важную информацию в случае чего. Просто чистите его когда вам нужно. Выводить результат вызова методов не могу - они требуют аргументов и блоков.
Последнее редактирование: 11 года 8 мес. назад пользователем Iren_Rin.
Спасибо сказали: DeadElf79

Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.

Проект месяца 1 место Программист Ruby Писатель 3 место 3 место Учитель Организатор конкурсов 1 место в Готв Ветеран Проект месяца 2 место
Больше
11 года 8 мес. назад #72816 от DeadElf79
DeadElf79 ответил в теме Debugger
А загружать без абсолютного пути никак не получится? Раз уж кодировкой дело не решить, то как-то же пути к папкам Data и Graphics находит и без особых проблем. или это особенность require?

Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.

Программист Ruby Коммерсант Проект года 1 место Учитель Проект месяца 1 место
Больше
11 года 8 мес. назад #72817 от Iren_Rin
Iren_Rin ответил в теме Debugger
Нужно попробовать require_relative, я просто хотел найти решение как для дебаггера, так и для гемов, чтобы не нужно было залезать без нужды в их код.

Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.

Проект месяца 1 место Программист Ruby Писатель 3 место 3 место Учитель Организатор конкурсов 1 место в Готв Ветеран Проект месяца 2 место
Больше
11 года 8 мес. назад - 11 года 8 мес. назад #72818 от DeadElf79
DeadElf79 ответил в теме Debugger
Насчет гемов - пока хз, но вот загрузка *.rb с помощью require проходит на ура, в $LOAD_PATH итак записана текущая папка.
Гемы это обязательно требуют или можно обойтись, не пробовал? Если требуют, попробуй как раз $LOAD_PATH+'some gem name'.
Последнее редактирование: 11 года 8 мес. назад пользователем DeadElf79. Причина: дополнил тут про гемы

Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.

Проект месяца 1 место Программист Ruby Писатель 3 место 3 место Учитель Организатор конкурсов 1 место в Готв Ветеран Проект месяца 2 место
Больше
11 года 8 мес. назад #72819 от DeadElf79
DeadElf79 ответил в теме Debugger
Решение исключительно для винды. Возможно, что где-либо еще оно не будет поддерживаться, поэтому можно включить его в сборку с пометкой об этом.

Короче, мы переводим строку в номера символов в таблице кодировки CP1251, если номер символа больше 128, то проверяем, содержится ли русская буква под его номером и заменяем ее на соответствующую букву в кодировке UTF8.

Пример кода:
Code:
str=File.expand_path(".") ords=str.each_char.to_a arr=[] ords.each{ |item| if item.ord<128 arr<<item else puts item.ord case item.ord when 196 arr<<["Д"] end end } arr.each{ |item| puts item }

Название папки символическое - Дебаггер.

Результат вывода:
[IMG
- значит, что букву "Д" он уже точно перевел в нужную кодировку, ура!

Кстати, специально для аккуратности выполнения, немного модифицировал твой же код для скрипта в мейкере:
Code:
class SideScriptsLoader class << self def load(dir) new(dir).load end def add_to_path(dir) new(dir).add_to_path end end def initialize(dir) @dirname = File.expand_path dir, Dir.pwd end def load if @dirname.ascii_only? load_entries if Dir.exist? @dirname else puts 'error in load' end end def add_to_path if @dirname.ascii_only? $LOAD_PATH << @dirname if Dir.exist? @dirname else puts 'error in add to path' end end private def load_entries Dir.entries(@dirname).each do |entry| require filname(entry) if entry =~ /\.rb\Z/ end end def filname(entry) File.expand_path File.join(@dirname, entry), Dir.pwd end end SideScriptsLoader.add_to_path 'lib' #добавляем lib папку в $LOAD_PATH SideScriptsLoader.load 'lib' #загружаем все rb файлы из lib папки

Теперь он будет выдавать ошибку и не вылетать. Вылеты меня раздражали ^_^

Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.

Программист Ruby Коммерсант Проект года 1 место Учитель Проект месяца 1 место
Больше
11 года 8 мес. назад #72825 от Iren_Rin
Iren_Rin ответил в теме Debugger
Строки это последовательность байтов с меткой кодировки. Нам не нужно отображать строку с путем, нам нужно ее правильно предоставить и загрузить по ней файл. В своем способе ты заменяешь одни байты, на другие, да это можно отоброзить на экране, но когда ты сделаешь require такой строки, руби не найдут файла. Для примера - попробуй просто скопировать путь к папке из адресной строки, вставить это в игровой редактор скриптов, и сделать require - файл не будет найден.

Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.

Программист Ruby Коммерсант Проект года 1 место Учитель Проект месяца 1 место
Больше
11 года 8 мес. назад #72872 от Iren_Rin
Iren_Rin ответил в теме Debugger
- Файл batch.rb переехал в отдельную папку batch/
- Исправил баг с сепаратором класса \ метода - убрал ошибку, и теперь методы класса \ объекта обозначаются так:
Code:
MyClass#instance_method MyClass.class_method
- Добавил метод bug для binding.
Code:
Debugger.load_console binding #так все еще работает binding.bug #тоже самое, что и сверху.
Спасибо сказали: DeadElf79

Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.

Проект месяца 1 место Программист Ruby Писатель 3 место 3 место Учитель Организатор конкурсов 1 место в Готв Ветеран Проект месяца 2 место
Больше
11 года 7 мес. назад #73621 от DeadElf79
DeadElf79 ответил в теме Debugger
Вроде как обошел require с его ошибками в кодировке и прочими "прелестями". Написал все достаточно просто, если оформить как надо - будет вообще хорошо.

Демка с примером: yadi.sk/d/FCa9W9c-bSztM
Спасибо сказали: Iren_Rin

Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.

Программист Ruby Коммерсант Проект года 1 место Учитель Проект месяца 1 место
Больше
11 года 7 мес. назад #73648 от Iren_Rin
Iren_Rin ответил в теме Debugger
Я поправил код загрузчика, теперь с этим загрузчиком консоль загрузится всегда. Спасибо Эльф!
Спасибо сказали: DeadElf79

Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.

Программист Ruby Коммерсант Проект года 1 место Учитель Проект месяца 1 место
Больше
11 года 4 мес. назад #76710 от Iren_Rin
Iren_Rin ответил в теме Debugger
Обновил немного дебаггер. Теперь его можно вызывать и в битве без ограничений.
Спасибо сказали: DeadElf79

Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.

Время создания страницы: 0.101 секунд
Работает на Kunena форум