Отладка в ZeroBrane Studio

Здесь обсуждается всё, что касается макросов.
paulclinger
Posts: 33
Joined: Sun 10 Mar, 2013 18:25

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

Post by paulclinger »

Latest post of the previous page:

> Всё работает, в IDE останавливается где положено.
> Однако визуально изменения не отображаются, т.е. новые точки не отображаются, а старые не убираются.

Да, обмен данными о точках останова идет в одну сторону, от IDE к приложению. Это было бы наверное интересно рапортовать текущий список после остановки, но пока никакой потребности на было, поскольку точки останова контролировались самим IDE. Подумаю над механизмом...
User avatar
John Doe
Бюрократ
Posts: 13801
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 72 times
Been thanked: 425 times
Contact:

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

Post by John Doe »



Edit
Это всё ерунда, ведь никто не мешает определить любые функции coro/uncoro в своём коде.
paulclinger
Posts: 33
Joined: Sun 10 Mar, 2013 18:25

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

Post by paulclinger »

John Doe wrote:Это всё ерунда, ведь никто не мешает определить любые функции coro/uncoro в своём коде.
Да, это возможно, но предложение интересное. mobdebug уже предоставляет done() вызов, который завершает отладку и убирает все ее следы, но продолжает приложение. В принципе, можно добавить в свой скрипт os.exit = require('mobdebug').done и тогда Stop в ZBS будет выключать отладку а не убивать приложение.

Я могу добавить восстановление coroutine.create как часть done() логики, но это не большая проблема, поскольку on() вызов ничего не делает если отладка не запущена, а сам вызов оригинального метода выполнен ка tail call, так что его даже в стеке не видно.
User avatar
John Doe
Бюрократ
Posts: 13801
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 72 times
Been thanked: 425 times
Contact:

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

Post by John Doe »

paulclinger wrote:но это не большая проблема
Знаю, это во мне перфекционизм играет )
Поэтому себе уже сделал восстановление

P.S.
В done не стоит восстанавливать coroutine.create
Во всяком случае в той системе, что я уже практически доделал - это мешало бы.
Впрочем, надо ещё подумать.
User avatar
John Doe
Бюрократ
Posts: 13801
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 72 times
Been thanked: 425 times
Contact:

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

Post by John Doe »

Сейчас приходится делать много приседаний вокруг того, что при завершении отладки посылается os.exit().
Может быть стоит добавить для функции start опциональный параметр - функцию, выполняемую при завершении.
По умолчанию пусть остаётся os.exit, а в фаре будем указывать mobdebug.done
paulclinger
Posts: 33
Joined: Sun 10 Mar, 2013 18:25

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

Post by paulclinger »

> Может быть стоит добавить для функции start опциональный параметр - функцию, выполняемую при завершении.

Я думал по этому поводу, но по-моему не самый оптимальный вариант, поскольку start() уже имеет несколько опциональных параметров.

Другие варианты:

1. локализовать os.exit внутри mobdebug. Это позволит установить os.exit в нужное значение, а после start(), восстановить.
2. добавить onexit вызов в mobdebug, который по умолчанию вызовет done() и os.exit(). Пользователи смогут назначить что-то другое.
3. добавить debugger.detachonstop опцию в ZBS. Это потребует дополнительной команды в mobdebug, но я уже подумывал ее добавить, так что detachonstop будет посылать DONE вместо EXIT. Это позволит добавить в ZBS команду Detach в дополнении к Stop.

Пока сколоняюсь к последнему варианту.
User avatar
John Doe
Бюрократ
Posts: 13801
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 72 times
Been thanked: 425 times
Contact:

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

Post by John Doe »

paulclinger wrote:2. добавить onexit вызов в mobdebug, который по умолчанию вызовет done() и os.exit(). Пользователи смогут назначить что-то другое.
Мне больше нравится этот вариант, т.к. он позволяет приложению отреагировать на завершение отладки.
Я сейчас это использую переопределяя os.exit
User avatar
John Doe
Бюрократ
Posts: 13801
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 72 times
Been thanked: 425 times
Contact:

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

Post by John Doe »

paulclinger wrote:
Была бы удобна команда соответствующая функции IDE ShiftF9 - Break execution at the next executed line of code
Это интересная идея. Вроде как 'остановить здесь'. Надо подумать как реализовать.
Пока что заменил установкой breakpoint:

Code: Select all

    local info = debug.getinfo(1)
    local name,line = norm(info.source:match"@(.+)"),info.currentline+2
    mobdebug.setbreakpoint(name,line); mobdebug.removebreakpoint(name,line)
Вызываю это из фара макросом на ShiftF9.
Выполнение останавливается как и требовалось, но есть один странный эффект: в текущую позицию редактора IDE вставляется [ESC] (приходится отменять по CtrlZ). Проявляется не каждый раз, понаблюдаю.

Также показалось неудобным что курсор не следует за исполняемой в данный момент строкой кода, и для перехода приходится кликать мышью.

И ещё одно серьёзное неудобство: Step over (ShiftF10) и Step out (CtrlF10) не останавливают выполнение после выхода из текущей функции.
User avatar
John Doe
Бюрократ
Posts: 13801
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 72 times
Been thanked: 425 times
Contact:

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

Post by John Doe »

Как запустить отладку с использованием ZeroBrane Studio, пошаговая инструкция

Приглашаю заинтересованных проверить ничего ли я не упустил.
Половину пунктов как следует не тестировал, поскольку в моей конфигурации всё несколько иначе (напр. пункт 2a проверен только в для случая когда профиль расположен в %FARHOME%)
Shmuel
Posts: 6815
Joined: Thu 23 Mar, 2006 21:36
Location: Israel
Has thanked: 41 times
Been thanked: 526 times

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

Post by Shmuel »

Отлично - то, что надо. Но лучше в шапку поместите.

P.S. Надо поправить: ZBS 0.40, а не 0.4.
User avatar
John Doe
Бюрократ
Posts: 13801
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 72 times
Been thanked: 425 times
Contact:

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

Post by John Doe »

Сделано.
А что скажете по поводу:
John Doe wrote:И ещё одно серьёзное неудобство: Step over (ShiftF10) и Step out (CtrlF10) не останавливают выполнение после выхода из текущей функции.
Может такое поведение нормально?
(я с отладчиками по жизни не сталкиваюсь)
Shmuel
Posts: 6815
Joined: Thu 23 Mar, 2006 21:36
Location: Israel
Has thanked: 41 times
Been thanked: 526 times

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

Post by Shmuel »

John Doe wrote:
John Doe wrote:И ещё одно серьёзное неудобство: Step over (ShiftF10) и Step out (CtrlF10) не останавливают выполнение после выхода из текущей функции.
Может такое поведение нормально?
Насколько я понимаю, само слово Step намекает на остановку выполнения по завершению действия.
User avatar
HaRT
Moderator
Posts: 10806
Joined: Tue 30 Aug, 2005 17:21
Has thanked: 220 times
Been thanked: 357 times

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

Post by HaRT »

Я как человек, часто и помногу работающий в отладчиках, прошу придерживаться привычного поведения и устоявшейся терминологии.
1. Запустить программу для отладки — Run/Start, начать отладку уже запущенной программы — Attach, прекратить отладку без завершения отлаживаемой программы — Detach, завершить отлаживаемую программу — Terminate, завершить и начать отладку заново — Restart, „остановить здесь“ — Run to Cursor (по меньшей мере в Visual Studio).
2. При пошаговой отладке удобно, когда каретка устанавливается на текущую инструкцию. И отдельно удобно иметь команду вернуть каретку к текущей инструкции (часто бывает надо куда-то уйти что-то посмотреть) — Show Next Statement.
3. Step in, Step over и Step out должны сразу же остановиться. При этом желательно, чтобы шагать не строками, а инструкциями (в Си/Си++ такого нет по историческим причинам, и это зачастую очень неудобно).
4. В выборе умолчательных кнопкосочетаний лучше придерживаться какого-то заявленного популярного образца (например, та же Visual Studio), а не делать самопальную амальгаму.
Фар есть инструмент, а не нянька. © 2009 DrKnS
User avatar
John Doe
Бюрократ
Posts: 13801
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 72 times
Been thanked: 425 times
Contact:

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

Post by John Doe »




Update: новая версия тут: http://forum.farmanager.com/viewtopic.p ... 04#p117004
paulclinger
Posts: 33
Joined: Sun 10 Mar, 2013 18:25

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

Post by paulclinger »

> 2. При пошаговой отладке удобно, когда каретка устанавливается на текущую инструкцию.

Это так и есть.

> И отдельно удобно иметь команду вернуть каретку к текущей инструкции (часто бывает надо куда-то уйти что-то посмотреть) — Show Next Statement.

Этого пока нет, но идея интересная. В плагин, в плагин...

> 3. Step in, Step over и Step out должны сразу же остановиться. При этом желательно, чтобы шагать не строками, а инструкциями (в Си/Си++ такого нет по историческим причинам, и это зачастую очень неудобно).

Это регулируется самим Lua интерпретатором. Стандартный интерпретатор генерирует callback только по-строчно. LuaJIT генерирует по инструкциям.

> И ещё одно серьёзное неудобство: Step over (ShiftF10) и Step out (CtrlF10) не останавливают выполнение после выхода из текущей функции.
> Может такое поведение нормально?

В данном случае это видимо фича; пришлось еще попотеть чтобы ее правильно реализовать. Дело в том что скорее всего код функции находится в своей coroutine. Команды Step over/out действуют внутри той же самой coroutine где они выполнены. Это сделано для того чтобы управление не бросало когда происходит yield/resume, а только когда есть return из функции. Step in всегда останавливается на следующей команде (в какой-бы coroutine она не была).

> Как запустить отладку с использованием ZeroBrane Studio, пошаговая инструкция

Хорошая инструкция! Один пункт я бы упростил. Вместо копирования файлов в пункте 3 можно просто на них сослаться, установив LUA_PATH и LUA_CPATH переменные окружения как описано здесь: http://studio.zerobrane.com/doc-remote- ... _debugging
User avatar
John Doe
Бюрократ
Posts: 13801
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 72 times
Been thanked: 425 times
Contact:

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

Post by John Doe »

paulclinger wrote:
2. При пошаговой отладке удобно, когда каретка устанавливается на текущую инструкцию.
Это так и есть.
Не совсем.
Текущая инструкция конечно же обозначается, но курсор остаётся в начале файла (или в месте последнего редактирования).
Что действительно делается, так это окно скроллируется к текущей инструкции, и то почему-то не всегда.
Закономерность пока не выявил, возможно сбой может происходить в случае когда срабатывает точка останова назначенная не в IDE (но не всегда)
paulclinger wrote:В данном случае это видимо фича;
Как-то обойти бы эту фичу, сильно мешает.
paulclinger wrote:Один пункт я бы упростил
Тогда придётся рассказывать где и как нужно устанавливать переменные, и никакого упрощения не получится )
Поначалу я хотел упомянуть о package.path/cpath, но отказался в пользу простого копирования.
В конце концов это неважно (а кому важно тот наверняка и без нас знает как обращаться с модулями)
Post Reply

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