Latest post of the previous page:
Обнаружил проблему сprint
В фаре эта функция переопределена, но при подключении отладчика переопределение отменяется.
(Проблема не связана с последними изменениями)
Latest post of the previous page:
Обнаружил проблему сprint
Прилагаю архив с двумя файлами: sample.lua и sample2.lua.paulclinger wrote:- Ошибка при подсчете текущей строки: viewtopic.php?f=15&t=8487&start=45#p116702
это я воспроизвести никак не смог. Можно пример файла на котором это происходило и описание: точный размер окна в строчках, где точка останова и т.д.
Нет, помимо DONE хотелось бы отдельную функцию. Если отладка управляется прямо из приложения, то ему надо как-то сообщить о завершении.paulclinger wrote:да onexit; еще думаю по этому поводу. Я думал что можно обойтись командой DONE и использовать ее вместо EXIT (задается debugger.detachonexit)
В ситуации когда отладчик подключён к другому приложению (http://forum.farmanager.com/viewtopic.p ... 46#p116646)paulclinger wrote:Так и должно быть. Она блокируется на connect, который завершается успешно если соединение установлено и отладка может идти. В какой ситуации это не работает?команда start должна возвращать управление только после подтверждения готовности отладчика.
Мне надо для того чтобы реализовать toggle http://forum.farmanager.com/viewtopic.p ... 46#p116646paulclinger wrote:- hasbreakpoint
а надо? как использовать?
А чтобы задать точку требуется (1)полный путь известный приложению привести к относительному виду (2)поменять слеши на прямые (3)преобразовать к нижнему регистру.paulclinger wrote:это скорее нет, разве что set/remove, но не has, поскольку эта функция часто вызывается из debug.hook. А чем абсолютные пути лучше чем относительные? они все рано устанавливаются относительно project directory.- (set|remove|has)breakpoint могли бы принимать полные пути, и самостоятельно преобразовывать их к нужному виду.
Разве передавать имеющуюся таблицу точек недостаточно?paulclinger wrote:Скорее нет, поскольку нет нормального способа передать это информацию.- В IDE было бы неплохо обновлять точки останова, установленные/снятые извне
Без вопросов плохо, т.к. удалятся точки останова (что если на основе diff пытаться их сохранить?)paulclinger wrote:Попробуй установить editor.autoreload = true. Если в IDE изменений не было а снаружи были, то файл будет перезагружен без вопросов.Если файлы редактируются извне (а не в IDE), то ZBS выводит диалог предлагая перезагрузить изменённый файл.
Этот момент был для меня неочевиден. Может быть стоит отметить пункт в меню галкой?paulclinger wrote:А зачем?сервер можно запустить, но нельзя остановить (пункт становится недоступен)Это потому что он автоматически запускается когда стартуешь отладку из IDE, а потом уже доступен.если хоть раз запустить отладку из IDE, то запуск сервера становится недоступен
Хотелось бы различать ещё 2 случая:paulclinger wrote:планирую добавить метод который вернет (1) nil если нет отдадки (перед start или после done), (2) true если текущая coroutine отлаживается и (3) false если нет.
Пока текущая папка соответствует папке проекта - всё в порядке. Но ведь нельзя на это полагаться:paulclinger wrote:Нет, это все должно работать. Если не работает, или что-то странное с путями, или ошибка в отладчике. Пример можно?Например если где-то в коде файл выполняется по относительному пути (dofile("my.lua")) - отладчик не сможет остановиться в этом файле.
debugger.redirect = "c"
Для привлечения внимания можно было бы до получения фокуса ввода применить комбинацию изpaulclinger wrote:Так оно и должно выводиться только при переключении фокуса.
MessageBeep
и/или FlashWindowEx
, как рекомендует MSDN.
Рекомендую ориентироваться на функциональность никсовой команды patch, когда она ищет, куда наложить заплатку.paulclinger wrote:проверить на совпадение строчек в окресностях прежних маркеров (+-10 строчек) и восстановить если строчки не поменялись
Отладчик Visual Studio, например, выводит туда то, что приложение пишет черезJohn Doe wrote:Не смертельно конечно, просто хотелось получить возможность вывода в окошко output...
OutputDebugString
…При неудаче start мог бы возвращать дополнительные значения: код/текст ошибки.paulclinger wrote:Это не получится. Клиент ничего об этом не знает, пока не подключится.Хотелось бы различать ещё 2 случая: - сервер не найден - сервер занят
Отладчик мог бы сам разворачивать относительные имена, и механизм работал бы.paulclinger wrote:Да, возможны ситуации когда текущий механизм не работает. Я добавлю в документацию.
Переопределяется, но неприемлемым образом.paulclinger wrote:А вот это я не понял: так вывод переопределяется или нет? должен переопределяться и выводить в окно Output. Причем если используется "c", то вывод должен идти в оба места.
Команду coro может понадобиться вызывать неоднократно. И каждый раз возвращаемые функции создаются заново.mobdebug.lua:1446 wrote:Code: Select all
if set == true then return corostub(cocreate), corostub(cowrap) end
Может быть лучшеmobdebug.lua:1443 wrote:Code: Select all
if set == nil and cocreate then return end -- only set once
if set == nil and cocreate~=coroutine.create then return end
?lfs разве проблема? В ZBS используется.paulclinger wrote:Не получится. Это требует получения текущей директории, а для этого нужен lfs или что-то подобное.
coro() тоже можно сделать локально.paulclinger wrote:Функцию добавлять смысла нет, поскольку можно все это сделать локально:
local farprint = print
require('mobdebug').start()
dbgprint, print = print, farprint
Там где нет или не поддерживается - ничего не поделаешь.paulclinger wrote:(а там lfs может не быть или не поддерживаться вообще).
Код, приведённый вами выше зависит от тогоpaulclinger wrote:можно конечно, но сложнее чем dbgprint ;)coro() тоже можно сделать локально.
В mobdebug сейчас для сообщения об ошибках используется вывод в консоль (print).paulclinger wrote:Надо посмотреть, скорее всего можно добавить.При неудаче start мог бы возвращать дополнительные значения: код/текст ошибки.