Отладка в ZeroBrane Studio

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

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

Post by paulclinger » Wed 12 Feb, 2014 22:52

Latest post of the previous page:

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

Да, обмен данными о точках останова идет в одну сторону, от IDE к приложению. Это было бы наверное интересно рапортовать текущий список после остановки, но пока никакой потребности на было, поскольку точки останова контролировались самим IDE. Подумаю над механизмом...

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

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

Post by John Doe » Wed 12 Feb, 2014 23:03



Edit
Это всё ерунда, ведь никто не мешает определить любые функции coro/uncoro в своём коде.

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

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

Post by paulclinger » Thu 13 Feb, 2014 00:12

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: 11390
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 17 times
Been thanked: 101 times

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

Post by John Doe » Thu 13 Feb, 2014 00:16

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

P.S.
В done не стоит восстанавливать coroutine.create
Во всяком случае в той системе, что я уже практически доделал - это мешало бы.
Впрочем, надо ещё подумать.

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

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

Post by John Doe » Thu 13 Feb, 2014 00:29

Сейчас приходится делать много приседаний вокруг того, что при завершении отладки посылается os.exit().
Может быть стоит добавить для функции start опциональный параметр - функцию, выполняемую при завершении.
По умолчанию пусть остаётся os.exit, а в фаре будем указывать mobdebug.done

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

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

Post by paulclinger » Thu 13 Feb, 2014 01:56

> Может быть стоит добавить для функции 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: 11390
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 17 times
Been thanked: 101 times

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

Post by John Doe » Thu 13 Feb, 2014 07:56

paulclinger wrote:2. добавить onexit вызов в mobdebug, который по умолчанию вызовет done() и os.exit(). Пользователи смогут назначить что-то другое.
Мне больше нравится этот вариант, т.к. он позволяет приложению отреагировать на завершение отладки.
Я сейчас это использую переопределяя os.exit

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

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

Post by John Doe » Thu 13 Feb, 2014 08:53

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: 11390
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 17 times
Been thanked: 101 times

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

Post by John Doe » Thu 13 Feb, 2014 09:53

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

Приглашаю заинтересованных проверить ничего ли я не упустил.
Половину пунктов как следует не тестировал, поскольку в моей конфигурации всё несколько иначе (напр. пункт 2a проверен только в для случая когда профиль расположен в %FARHOME%)

Shmuel
Posts: 5227
Joined: Thu 23 Mar, 2006 21:36
Location: Israel
Has thanked: 16 times
Been thanked: 151 times

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

Post by Shmuel » Thu 13 Feb, 2014 10:00

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

P.S. Надо поправить: ZBS 0.40, а не 0.4.

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

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

Post by John Doe » Thu 13 Feb, 2014 10:35

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

Shmuel
Posts: 5227
Joined: Thu 23 Mar, 2006 21:36
Location: Israel
Has thanked: 16 times
Been thanked: 151 times

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

Post by Shmuel » Thu 13 Feb, 2014 10:52

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

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

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

Post by HaRT » Thu 13 Feb, 2014 12:12

Я как человек, часто и помногу работающий в отладчиках, прошу придерживаться привычного поведения и устоявшейся терминологии.
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: 11390
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 17 times
Been thanked: 101 times

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

Post by John Doe » Thu 13 Feb, 2014 22:38




Update: новая версия тут: viewtopic.php?p=117004#p117004

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

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

Post by paulclinger » Fri 14 Feb, 2014 08:22

> 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: 11390
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 17 times
Been thanked: 101 times

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

Post by John Doe » Fri 14 Feb, 2014 12:10

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

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

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

Post by John Doe » Fri 14 Feb, 2014 13:22

John Doe wrote:окно скроллируется к текущей инструкции, и то почему-то не всегда.
Кажется нашёл в чем проблема.
Похоже при позиционировании проверяется "видимость" текущей строки на экране, чтобы избежать лишних прыжков, в случае когда строка и так на экране.
И при определённых условиях эта логика даёт сбой.

Пример:
  • Точка останова находится в файле, ещё не открытом в IDE.
  • Точка останова попадает в конец экрана.
    (Например высота экрана 20 строк, и точка останова в 20й строке файла)
  • Выше точки останова есть длинные строки, чтобы при открытии в IDE получился перенос.
Другая проблема с позиционированием возникает также в случае, когда в файл почему-то попадает [ESC] (описано на прошлой странице: viewtopic.php?p=116663#p116663)

Post Reply

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