Отладка в ZeroBrane Studio

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

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

Post by John Doe »

Latest post of the previous page:

paulclinger wrote:
Можно ли подхватить в IDE точки, установленные с помощью setbreakpoint? Мне не удалось её использовать, установленные точки не срабатывают. Файл задаю полным путём, и has_breakpoint возвращает true
Попробуй путь относительно project directory. Отладчик использует относительные пути.
Получилось примерно так: local name = Editor.FileName:lower():gsub(projectroot,""):gsub("\\","/")
Всё работает, в IDE останавливается где положено.
Однако визуально изменения не отображаются, т.е. новые точки не отображаются, а старые не убираются.
Shmuel
Posts: 6820
Joined: Thu 23 Mar, 2006 21:36
Location: Israel
Has thanked: 41 times
Been thanked: 528 times

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

Post by Shmuel »

paulclinger wrote:
Shmuel wrote:Убрать локализацию только с coroutine.create или с других coroutine.xxx тоже?
Только с coroutine.create.
Убрал.
paulclinger
Posts: 33
Joined: Sun 10 Mar, 2013 18:25

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

Post by paulclinger »

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

Да, обмен данными о точках останова идет в одну сторону, от IDE к приложению. Это было бы наверное интересно рапортовать текущий список после остановки, но пока никакой потребности на было, поскольку точки останова контролировались самим IDE. Подумаю над механизмом...
User avatar
John Doe
Бюрократ
Posts: 13807
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 73 times
Been thanked: 426 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: 13807
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 73 times
Been thanked: 426 times
Contact:

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

Post by John Doe »

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

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

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

Post by John Doe »

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

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

Post by John Doe »

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

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

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

Post by Shmuel »

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

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

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

Post by John Doe »

Сделано.
А что скажете по поводу:
John Doe wrote:И ещё одно серьёзное неудобство: Step over (ShiftF10) и Step out (CtrlF10) не останавливают выполнение после выхода из текущей функции.
Может такое поведение нормально?
(я с отладчиками по жизни не сталкиваюсь)
Shmuel
Posts: 6820
Joined: Thu 23 Mar, 2006 21:36
Location: Israel
Has thanked: 41 times
Been thanked: 528 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: 10823
Joined: Tue 30 Aug, 2005 17:21
Has thanked: 221 times
Been thanked: 358 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: 13807
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 73 times
Been thanked: 426 times
Contact:

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

Post by John Doe »




Update: новая версия тут: http://forum.farmanager.com/viewtopic.p ... 04#p117004
Post Reply

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