Как определить место ошибки Topic is solved

Столкнулись с проблемой в использовании макросов? Здесь можно получить помощь.
Post Reply
User avatar
buniak_a_h
Posts: 4259
Joined: Sat 20 Apr, 2013 00:17
Location: Санкт-Петробад
Has thanked: 222 times
Been thanked: 644 times
Contact:

Как определить место ошибки

Post by buniak_a_h »

Сообщение об ошибке очень лаконичное:
╔═════════════════════ LuaMacro ══════════════════════╗ ║ bad argument #1 to '?' (number expected, got table) ║ ║ stack traceback: ║ ║ [C]: at 0x7ffe11e10800 ║ ╟─────────────────────────────────────────────────────╢ ║ { OK } ║ ╚═════════════════════════════════════════════════════╝
Какие действия я могу предпринять, чтобы хоть что-то прояснилось?
P/S. Во вложении скрипт, в котором происходит странность.
Пара слов.
Скрипт переводит командную строку в редактор (историю см. тут).
При автодополнении вызывается far.Dialog с однострочным диалогом. Почти все нажатия клавиш в диалоге приводят к закрытию диалога и передаются редактору, как подсказал тут и тут уважаемый zg)
Если в самом редакторе нажать CtrlDown, то вызывается меню для выбора команды. Но если CtrlDown нажать в диалоге, то диалог закрывается и возникает эта безадресная ошибка.
Итак, последовательность действий:
  1. В панели CtrlAltF4;
  2. Набрать начало строки, имеющейся в истории (например, lua:);
  3. Нажать CtrlDown.
EditCmdLine.lua
(15.68 KiB) Downloaded 50 times
User avatar
citRiks
Posts: 1733
Joined: Fri 25 Oct, 2019 18:18
Has thanked: 610 times
Been thanked: 102 times

Как определить место ошибки

Post by citRiks »

Есть вот это StackTracePlus:
viewtopic.php?p=166120
он показывает неплохо
Есть моя расширенная улучшенная версия на ту же тему
Но то что выложено мною устарело и с багами,
могу загрузить если вы хотите попробовать мою
что я вам и рекомендую
Shmuel
Posts: 6834
Joined: Thu 23 Mar, 2006 21:36
Location: Israel
Has thanked: 41 times
Been thanked: 530 times

Как определить место ошибки

Post by Shmuel »

Не воспроизводится, пробовал на разных билдах Фара, включая последний.
При нажатии CtrlDown просто исчезает подсказка.
User avatar
zg
zero-gravity
Posts: 6034
Joined: Tue 15 Mar, 2005 17:36
Location: riga
Been thanked: 185 times
Contact:

Как определить место ошибки

Post by zg »

у меня воспроизводится.
Shmuel
Posts: 6834
Joined: Thu 23 Mar, 2006 21:36
Location: Israel
Has thanked: 41 times
Been thanked: 530 times

Как определить место ошибки

Post by Shmuel »

И у меня воспроизводится, просто нажимал не ту клавишу.
Ошибка вызывается этим: mf.postmacro(editor.ProcessInput, Param2)
Должно быть mf.postmacro(editor.ProcessInput, <EditorId>, Param2)
User avatar
buniak_a_h
Posts: 4259
Joined: Sat 20 Apr, 2013 00:17
Location: Санкт-Петробад
Has thanked: 222 times
Been thanked: 644 times
Contact:

Как определить место ошибки

Post by buniak_a_h »

Shmuel, спасибо, глаз замылился. Хотя проблема с диагностикой, по-моему, есть: не вывелось название функции, в которой беда произошла.
Shmuel
Posts: 6834
Joined: Thu 23 Mar, 2006 21:36
Location: Israel
Has thanked: 41 times
Been thanked: 530 times

Как определить место ошибки

Post by Shmuel »

Проблема с диагностикой есть, но решить её не совсем тривиально.
  • mf.postmacro создаёт структуру макроса (Lua-таблицу), в которую помещает функцию и параметры.
  • Поскольку помещается сама функция, а не способ досттупа к ней (_G -> "editor" -> "ProcessInput"), то эта функция становится безымянной.
  • Стек отсутствует, потому что запуск макроса является асинхронным ("когда Фар освободится").
User avatar
buniak_a_h
Posts: 4259
Joined: Sat 20 Apr, 2013 00:17
Location: Санкт-Петробад
Has thanked: 222 times
Been thanked: 644 times
Contact:

Как определить место ошибки

Post by buniak_a_h »

Shmuel wrote: Fri 21 Oct, 2022 15:19 Стек отсутствует…
Post Reply

Return to “Нужна помощь”