Отладка в ZeroBrane Studio

Здесь обсуждается всё, что касается макросов.
User avatar
John Doe
Бюрократ
Posts: 12826
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 38 times
Been thanked: 286 times

Re: Отладка в ZeroBrane Studio

Post by John Doe »

Latest post of the previous page:

paulclinger wrote:(а там lfs может не быть или не поддерживаться вообще).
Там где нет или не поддерживается - ничего не поделаешь.
А там где есть - почему бы не использовать.
paulclinger wrote:
coro() тоже можно сделать локально.
можно конечно, но сложнее чем dbgprint ;)
Код, приведённый вами выше зависит от того
- активен ли в данный момент сервер
- установлена ли в конфиге IDE опция debugger.redirect
Это по меньшей мере ненадёжно.
Edit: Похоже первый вызов mobdebug.on также переназначает print/dbgprint
paulclinger wrote:
При неудаче start мог бы возвращать дополнительные значения: код/текст ошибки.
Надо посмотреть, скорее всего можно добавить.
В mobdebug сейчас для сообщения об ошибках используется вывод в консоль (print).
В фаре это представляет проблему, т.к. print переопределён, и его вызов из mobdebug ведёт к нежелательным последствиям.
Поэтому вместо print желательно сообщать об ошибках через возвращаемые значения.

User avatar
John Doe
Бюрократ
Posts: 12826
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 38 times
Been thanked: 286 times

Re: Отладка в ZeroBrane Studio

Post by John Doe »

О неудобствах сообщил, пожелания высказал.
Надеюсь автор примет во внимание, ну а пока для обхода "скользких" мест набросал модуль-обёртку с таким интерфейсом:
  • attach(on_detach)
    Надстройка над mobdebug.start.
    В случае ошибки не пытается использовать print, а возвращает вторым значением текст.
    Т.к. отладчик при завершении отладки посылает os.exit - данная функция переопределяется, для выполнения mobdebug.done() и др.
    Первый параметр: функция, выполняемая при отключении от отладчика.
    detach() - парная функция, позволяющая завершить отладку из приложения (а не из IDE).
  • on(), off() - соответствуют одноимённым функциям mobdebug.
  • status(param) - функция, позволяющая получить состояние, соответствующее заданному параметру.
    Параметр может быть одной из строк: "attached","on"
  • coro(set) - вариант исправленный как обсуждалось.
    При запуске без параметров переопределяет coroutine.createwrap
    При запуске c параметром true/false только возвращает патченые/оригинальные функции.
  • breakhere() - выполнение приостанавливается
  • hasbreakpoint(file,line) - проверка существования точки останова.
    Плюс функции setbreakpoint/removebreakpoint, переопределённые так, чтобы файла можно было задавать полным путём, не заботясь об переводе слешей в прямые, и о том где сейчас корень проекта.
  • setprojectroot(path) - служит для установки корневой папки проекта.
    Необходим однократный вызов, от этого зависят функции breakhere и *breakpoint
    Надеюсь что это временное решение, т.к. выбор папки всё-таки производится в IDE, и не очень осмысленно дублировать этот выбор вызовом из отлаживаемого приложения.
  • dbgprint(...) - вывод в IDE окно Output.
    Для правильной работы необходимо добавить в конфиг ZBS опцию debugger.redirect = "c"
    (где искать файл конфигурации см. первый шаг инструкции в шапке)
    Внимание: в данном модуле предпринимаются специальные действия для исключения побочных эффектов опции debugger.redirect = "c".
    Использовать эту опцию при отладке макросов фара без данного модуля не рекомендуется
Часть перечисленных функций реализованы в неполноценно, т.к. отсутствует поддержка со стороны mobdebug.
Хотелось бы иметь всё это сразу в mobdebug без каких-либо обёрток.

User avatar
John Doe
Бюрократ
Posts: 12826
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 38 times
Been thanked: 286 times

Re: Отладка в ZeroBrane Studio

Post by John Doe »

Набор макросов, позволяющих управлять отладкой прямо из фара.

Клавиатурные сочетания аналогичны имеющимся в IDE (кроме AltF5).
Большая часть макросов предназначена для редактора в котором открыт *.lua скрипт.
AltF5 и ShiftF9 - исключение, они для области Common (только во время отладки).
  • F5 - подключиться к отладчику (начать отладку)
  • ShiftF5 - отключиться от отладчика (завершить отладку)
  • AltF5 - (временно) выключить/включить отладку не отключаясь от отладчика.
    Может быть полезно, т.к. отладка существенно замедляет выполнение кода.
  • ShiftF9 - прервать выполнение текущего скрипта и перейти в IDE.
    Внимание: для работы F9 и ShiftF9 важно чтобы папка проекта, устанавливаемая командой ZBS.setprojectroot (в самом начале файла) совпадала с той, что назначена в IDE.
  • F9 - установить/снять точку останова.
    Точки останова можно менять в любой момент, но работают (естественно) только во время отладки.
    Внимание: точки установленные/снятые в редакторе фара (пока?) не отображаются в IDE.
Особенности: corotine.create и coroutine.wrap подменяются только во время отладки, и восстанавливаются при её завершении, или временном выключении.


В макросах используется модуль zbs.lua из поста выше.
Всё вместе можно скачать из вложения, и распаковать в %FARPROFILE%\Macros\
Attachments
zbs.7z
(1.74 KiB) Downloaded 103 times

paulclinger
Posts: 33
Joined: Sun 10 Mar, 2013 18:25

Re: Отладка в ZeroBrane Studio

Post by paulclinger »

John Doe wrote:
paulclinger wrote:
Если файлы редактируются извне (а не в IDE), то ZBS выводит диалог предлагая перезагрузить изменённый файл.
Попробуй установить editor.autoreload = true. Если в IDE изменений не было а снаружи были, то файл будет перезагружен без вопросов.
Без вопросов плохо, т.к. удалятся точки останова (что если на основе diff пытаться их сохранить?)
Может быть можно исправить ситуацию иначе? Например не выводить сообщение сразу, а подождать пока ZBE получит фокус.
Добавил сохранение и восстановление всех маркеров. Если количество строк в файле остался тем же, то восстанавливает по номерам строк. если изменилось, то ищет по совпадение строк с окресности оригиналов. В github репозитории...

User avatar
John Doe
Бюрократ
Posts: 12826
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 38 times
Been thanked: 286 times

Отладка в ZeroBrane Studio

Post by John Doe »

Никто часом не составлял luafar api-файл для ZBS?
(Тот что для автодополнения и подсказок)
Last edited by John Doe on Fri 09 Sep, 2016 23:02, edited 1 time in total.

Shmuel
Posts: 6126
Joined: Thu 23 Mar, 2006 21:36
Location: Israel
Has thanked: 31 times
Been thanked: 309 times

Отладка в ZeroBrane Studio

Post by Shmuel »

John Doe wrote: Никто часом не составлял luafar api-файл для ZBS?
Нет. По-видимому, можно написать скрипт для генерации этого файла из luafar_manual.tsi.

User avatar
John Doe
Бюрократ
Posts: 12826
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 38 times
Been thanked: 286 times

Отладка в ZeroBrane Studio

Post by John Doe »

Собственно, задача состоит в получении статей в plaintext, организованных иерархически (т.е. far*, panel*, editor*, ...), для использования в качестве быстрой онлайн справки.
Shmuel wrote: По-видимому, можно написать скрипт для генерации этого файла из luafar_manual.tsi.
Как я понимаю примеры обращения с исходником мануала можно почерпнуть из tp2hh.lua, но что-то пока меня не вдохновило..

Shmuel
Posts: 6126
Joined: Thu 23 Mar, 2006 21:36
Location: Israel
Has thanked: 31 times
Been thanked: 309 times

Отладка в ZeroBrane Studio

Post by Shmuel »

John Doe wrote: примеры обращения с исходником мануала можно почерпнуть из tp2hh.lua, но что-то пока меня не вдохновило..
Значит не очень-то вам это надо. В скрипте tp2hh.lua меньше 300 строк, он чётко разделён на функции и вообще весьма прямолинеен. Если будут вопросы - отвечу, но сам делать не буду, т.к. ZBS на данный момент не пользуюсь.

User avatar
John Doe
Бюрократ
Posts: 12826
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 38 times
Been thanked: 286 times

Отладка в ZeroBrane Studio

Post by John Doe »

Shmuel wrote: ZBS на данный момент не пользуюсь.
Я вообще для фара как раз хочу:
А в этой теме спросил на всякий случай, вдруг кто уже привёл и luafar мануал к подходящему виду.

Shmuel
Posts: 6126
Joined: Thu 23 Mar, 2006 21:36
Location: Israel
Has thanked: 31 times
Been thanked: 309 times

Отладка в ZeroBrane Studio

Post by Shmuel »

Вполне можно использовать tp2hh.lua как исходную точку. Поскольку преобразование в простой текст намного проще, чем в HTML Help, то подозреваю, что результирующий скрипт окажется вдвое-втрое меньше исходного.

citRiks
Posts: 644
Joined: Fri 25 Oct, 2019 18:18
Has thanked: 175 times
Been thanked: 43 times

Отладка в ZeroBrane Studio

Post by citRiks »

John Doe wrote:
Fri 09 Sep, 2016 23:01
Никто часом не составлял luafar api-файл для ZBS?
(Тот что для автодополнения и подсказок)
а где такое НЕ для ЗБС?

citRiks
Posts: 644
Joined: Fri 25 Oct, 2019 18:18
Has thanked: 175 times
Been thanked: 43 times

Отладка в ZeroBrane Studio

Post by citRiks »

John Doe wrote:
Mon 24 Feb, 2014 01:37
Набор макросов, позволяющих управлять отладкой прямо из фара.
думаю в начало всех скриптов на тему ЗБС можно смело вставлять:

Code: Select all

if win.IsProcess64bit() then return end

User avatar
HaRT
Moderator
Posts: 9421
Joined: Tue 30 Aug, 2005 17:21
Location: Санкт-Петербург
Has thanked: 105 times
Been thanked: 219 times

Отладка в ZeroBrane Studio

Post by HaRT »

citRiks wrote:
Mon 06 Apr, 2020 16:40
а где такое НЕ для ЗБС?
Вы про автодополнение и подсказки? Тогда хоть в VS Code, хоть в IntelliJ IDEA. И думаю, что какие-то способы описать свой API там тоже есть.
Фар есть инструмент, а не нянька. © 2009 DrKnS

citRiks
Posts: 644
Joined: Fri 25 Oct, 2019 18:18
Has thanked: 175 times
Been thanked: 43 times

Отладка в ZeroBrane Studio

Post by citRiks »

HaRT, эмм, да не знаю я про что я :) помню что мне просто понравился приведенный @JD принтскрин
тут собсна:
viewtopic.php?p=140719#p140719
Ну наверное не очень важно это.
A cейчас буду писать про гораздо более важное :)
Last edited by citRiks on Sat 09 May, 2020 11:08, edited 1 time in total.

citRiks
Posts: 644
Joined: Fri 25 Oct, 2019 18:18
Has thanked: 175 times
Been thanked: 43 times

Отладка в ZeroBrane Studio

Post by citRiks »

Во-первых - ЗБС это очень полезная вещь,
Я считаю что Кульченко надо дать орден и зачислить в ФАР-тим даже если он этого не хочет :)
@JD - тоже мой герой, что собрал макросы и адпатации для ФАРа, пропихнул эту тему.
Теперь содержательная часть.
Мои предложения тем кто работает/собирается работать с ЗБС

* Вымораживало что надо каждый раз делать "Start Debug server",
рекомендую сделать auto-start таким образом, берем файл:
%Program Files(x86)%\ZeroBraneStudio\src\main.lua
строчки начиная с 883 должны выглядеть так:

Code: Select all

ide:GetDebugger():Listen(true) -- start/stop listening
ide.interpreter:fattachdebug()

wx.wxGetApp():MainLoop()

-- protect from occasional crash on macOS and Linux from `wxluaO_deletegcobject`
os.exit()
* Можно и назначить в user.lua хот-кей опять же для запуска дебаг-сервера:
ide.config.keymap[ID.ATTACHDEBUG] = "Ctrl-Shift-D"
.. как и там же так же переназначить другие хот-кеи на более привычные.

citRiks
Posts: 644
Joined: Fri 25 Oct, 2019 18:18
Has thanked: 175 times
Been thanked: 43 times

Отладка в ZeroBrane Studio

Post by citRiks »

Далее, в последних ФАРах с новым модулем для УТФ8 поставляемый mobdebug теперь работает некорректно :(
Я его однако подлечил, однако кто его знает что там осталось мной незамеченным
Присоединянюю mobdebug который в результате получился, в основном там замены :gsub на string.gsub
Attachments
mobdebug.lua.7z
(16.91 KiB) Downloaded 5 times

Post Reply

Return to “Обсуждение макросов”