Войти на сайт

Авторизация, ждите ...
×
  • Страница:
  • 1
  • 2

ТЕМА: Debugger

Debugger 9 года 7 мес. назад #72703

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

Debugger 9 года 7 мес. назад #72815

  • Iren_Rin
  • Iren_Rin аватар
  • Вне сайта
  • Мастер
  • Сообщений: 247
  • Спасибо получено: 537
  • Проект года 1 местоУчительПроект месяца 1 местоКоммерсантПрограммист Ruby
К сожалению решить наскоком проблему с кодировкой пути к проекту не удалось. Поэтому как временное решение для таких проектов предлагаю загружать консоль в проект по старинке - вставив скрипт. в этом большом файле сгружены все файлы, и пропущены require команды. Просто вставьте этот скрипт и все должно работать без проблем.

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

Debugger 9 года 7 мес. назад #72816

  • DeadElf79
  • DeadElf79 аватар
  • Вне сайта
  • Звездный Страж
  • Сообщений: 3147
  • Спасибо получено: 2650
  • Проект месяца 1 место3 местоУчитель1 место в ГотвВетеранПрограммист RubyОрганизатор конкурсовПроект месяца 2 местоПисатель 3 место
А загружать без абсолютного пути никак не получится? Раз уж кодировкой дело не решить, то как-то же пути к папкам Data и Graphics находит и без особых проблем. или это особенность require?
Администратор запретил публиковать записи гостям.

Debugger 9 года 7 мес. назад #72817

  • Iren_Rin
  • Iren_Rin аватар
  • Вне сайта
  • Мастер
  • Сообщений: 247
  • Спасибо получено: 537
  • Проект года 1 местоУчительПроект месяца 1 местоКоммерсантПрограммист Ruby
Нужно попробовать require_relative, я просто хотел найти решение как для дебаггера, так и для гемов, чтобы не нужно было залезать без нужды в их код.
Администратор запретил публиковать записи гостям.

Debugger 9 года 7 мес. назад #72818

  • DeadElf79
  • DeadElf79 аватар
  • Вне сайта
  • Звездный Страж
  • Сообщений: 3147
  • Спасибо получено: 2650
  • Проект месяца 1 место3 местоУчитель1 место в ГотвВетеранПрограммист RubyОрганизатор конкурсовПроект месяца 2 местоПисатель 3 место
Насчет гемов - пока хз, но вот загрузка *.rb с помощью require проходит на ура, в $LOAD_PATH итак записана текущая папка.
Гемы это обязательно требуют или можно обойтись, не пробовал? Если требуют, попробуй как раз $LOAD_PATH+'some gem name'.
Последнее редактирование: 9 года 7 мес. назад от DeadElf79. Причина: дополнил тут про гемы
Администратор запретил публиковать записи гостям.

Debugger 9 года 7 мес. назад #72819

  • DeadElf79
  • DeadElf79 аватар
  • Вне сайта
  • Звездный Страж
  • Сообщений: 3147
  • Спасибо получено: 2650
  • Проект месяца 1 место3 местоУчитель1 место в ГотвВетеранПрограммист RubyОрганизатор конкурсовПроект месяца 2 местоПисатель 3 место
Решение исключительно для винды. Возможно, что где-либо еще оно не будет поддерживаться, поэтому можно включить его в сборку с пометкой об этом.

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

Пример кода:
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
}

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

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

Кстати, специально для аккуратности выполнения, немного модифицировал твой же код для скрипта в мейкере:
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 папки

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

Debugger 9 года 7 мес. назад #72825

  • Iren_Rin
  • Iren_Rin аватар
  • Вне сайта
  • Мастер
  • Сообщений: 247
  • Спасибо получено: 537
  • Проект года 1 местоУчительПроект месяца 1 местоКоммерсантПрограммист Ruby
Строки это последовательность байтов с меткой кодировки. Нам не нужно отображать строку с путем, нам нужно ее правильно предоставить и загрузить по ней файл. В своем способе ты заменяешь одни байты, на другие, да это можно отоброзить на экране, но когда ты сделаешь require такой строки, руби не найдут файла. Для примера - попробуй просто скопировать путь к папке из адресной строки, вставить это в игровой редактор скриптов, и сделать require - файл не будет найден.
Администратор запретил публиковать записи гостям.

Debugger 9 года 7 мес. назад #72872

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

Debugger 9 года 6 мес. назад #73621

  • DeadElf79
  • DeadElf79 аватар
  • Вне сайта
  • Звездный Страж
  • Сообщений: 3147
  • Спасибо получено: 2650
  • Проект месяца 1 место3 местоУчитель1 место в ГотвВетеранПрограммист RubyОрганизатор конкурсовПроект месяца 2 местоПисатель 3 место
Вроде как обошел require с его ошибками в кодировке и прочими "прелестями". Написал все достаточно просто, если оформить как надо - будет вообще хорошо.

Демка с примером: yadi.sk/d/FCa9W9c-bSztM
Администратор запретил публиковать записи гостям.
За этот пост поблагодарили: Iren_Rin

Debugger 9 года 6 мес. назад #73648

  • Iren_Rin
  • Iren_Rin аватар
  • Вне сайта
  • Мастер
  • Сообщений: 247
  • Спасибо получено: 537
  • Проект года 1 местоУчительПроект месяца 1 местоКоммерсантПрограммист Ruby
Я поправил код загрузчика, теперь с этим загрузчиком консоль загрузится всегда. Спасибо Эльф!
Администратор запретил публиковать записи гостям.
За этот пост поблагодарили: DeadElf79

Debugger 9 года 2 мес. назад #76710

  • Iren_Rin
  • Iren_Rin аватар
  • Вне сайта
  • Мастер
  • Сообщений: 247
  • Спасибо получено: 537
  • Проект года 1 местоУчительПроект месяца 1 местоКоммерсантПрограммист Ruby
Обновил немного дебаггер. Теперь его можно вызывать и в битве без ограничений.
Администратор запретил публиковать записи гостям.
За этот пост поблагодарили: DeadElf79
  • Страница:
  • 1
  • 2
Время создания страницы: 0.307 секунд