LuaMacro: подземный стук..

Здесь можно сообщить о найденных багах в Far.
Post Reply
User avatar
John Doe
Бюрократ
Posts: 11425
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 17 times
Been thanked: 101 times

LuaMacro: подземный стук..

Post by John Doe » Wed 24 Aug, 2016 09:20

Какая-то странная ошибка, вызванная совокупностью факторов.
С одной стороны, какая-то ошибка скорее всего в моих скриптах (а точнее в модуле), потому что без них не проявляется.
С другой стороны, если luamacro единственный плагин, то не воспроизводится.

А проявляется так:
Иногда "attempt to call a nil value" не выдаётся, а сразу Exception.

Иногда лог более подробный, см. вложение
Attachments
FarTrap_20160824111811.log.7z
(26.5 KiB) Downloaded 21 times

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

LuaMacro — Lua как язык макросов

Post by Shmuel » Wed 24 Aug, 2016 09:34

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

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

LuaMacro — Lua как язык макросов

Post by John Doe » Wed 24 Aug, 2016 09:42

Пока пробую максимально изолировать условия..

Добавил в одном месте вызов far.Show - ошибка пропала
Ещё раз (код не менял) после "attempt to call a nil value " выдало

Code: Select all

╔══════════════ LuaMacro ═══════════════╗
║ attempt to compare number with string ║
╟───────────────────────────────────────╢
║                { OK }                 ║
╚═══════════════════════════════════════╝
Можно ли как-то добиться, чтобы в сообщении была информация о месте ошибки, и стек вызовов?


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

LuaMacro — Lua как язык макросов

Post by Shmuel » Wed 24 Aug, 2016 09:49

John Doe wrote: Можно ли как-то добиться, чтобы в сообщении была информация о месте ошибки, и стек вызовов?
Если ещё нет на мантисе, добавьте. (Прямо сейчас времени нет).

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

LuaMacro — Lua как язык макросов

Post by Shmuel » Wed 24 Aug, 2016 14:23

John Doe
На всякий случай обновил LuaJIT 2.0.4 до текущего состояния. Там за 15 месяцев после релиза был ряд фиксов.

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

LuaMacro — Lua как язык макросов

Post by John Doe » Wed 24 Aug, 2016 19:57

Shmuel wrote: Если ещё нет на мантисе, добавьте.
Вот такое есть:
0003013: Отображать traceback при ошибках, возникающих в процессе загрузки макрофайлов
Shmuel wrote: с доступом к системе, на которой проявляется
У меня воспроизводится на двух системах: XP и 8.1, x86.
Выложу минимальный набор, если кто-то возьмётся диагностировать.

Обновление luajit не повлияло.

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

LuaMacro — Lua как язык макросов

Post by Shmuel » Wed 24 Aug, 2016 20:01

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

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

LuaMacro — Lua как язык макросов

Post by John Doe » Wed 24 Aug, 2016 20:24

Постараться убрать лишнее да, я могу, и уже выявил минимальный набор скриптов (3).
Но поскольку ошибка не в скрипте, то найти её у меня никак не получится.
Например изменяю порядок выполнения 2х никак не связанных участков кода - и уже не падает.

Могу ещё попытаться максимально упростить скрипты, пока сохраняется воспроизводимость ошибки.
Но например набор плагинов для воспроизведения у меня сократить не получилось: если делю их пополам, то уже не падает.

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

LuaMacro — Lua как язык макросов

Post by Shmuel » Wed 24 Aug, 2016 20:31

1. Попробуйте поставить файл %farprofile%\luafar_init.lua, а в нём одна строчка jit.off() и перезапустить Фар.
2. Можете выложить комплект, какое-то не слишком большое время могу поиграться.

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

LuaMacro — Lua как язык макросов

Post by HaRT » Wed 24 Aug, 2016 20:33

John Doe, а Вы Фар у себя собираете? Воспроизводится ли, если Фар собран в отладочной конфигурации (Debug)?
Впрочем, даже и в релизе, если подложить Far.pdb рядом с Far.exe (очень важно, чтобы они были для одной и той же сборки), запустить Фар из-под отладчика (например, Microsoft Visual Studio) и воспроизвести падение, то должно ввалиться в отладчик, и там может быть информативный Call Stack (из Visual Studio его можно скопировать в виде текста).
Фар есть инструмент, а не нянька. © 2009 DrKnS

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

LuaMacro — Lua как язык макросов

Post by John Doe » Wed 24 Aug, 2016 20:55

Shmuel
jit.off не влияет
Набор завтра подготовлю

HaRT
Использую сборки с офсайта.
Могу собрать gcc, проверить воспроизводится ли так.
Отладчиком не владею.

Update
Не знаю что я поменял, но теперь ни на одной системе уже не воспроизводится..

User avatar
DrKnS
Posts: 4648
Joined: Thu 04 Aug, 2005 06:44
Location: Kyiv
Has thanked: 4 times
Been thanked: 125 times
Contact:

LuaMacro — Lua как язык макросов

Post by DrKnS » Wed 24 Aug, 2016 21:03

Если положить far.pdb с сайта рядом с far.exe, взятым тоже с сайта, удалить или отключить fexcept и воспроизвести падение - будет более адекватный диалог с кнопкой 'Stack', даже без отладчика.

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

LuaMacro — Lua как язык макросов

Post by HaRT » Wed 24 Aug, 2016 21:06

John Doe wrote: Могу собрать gcc
Ну тогда и отладчик нужен будет на основе gdb, а не Visual Studio.
Принципиальной разницы нет, но вот как в этом случае получить Call Stack (он же Backtrace) в виде текста, я уже не подскажу. Да это и зависит от того, какой будет использован front-end: gdb (консольный); Qt Creator, Eclipse (графические), и т.д.
Фар есть инструмент, а не нянька. © 2009 DrKnS

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

LuaMacro: подземный стук..

Post by John Doe » Sat 24 Sep, 2016 12:36

Подземный стук вернулся..
DrKnS wrote: Если положить far.pdb с сайта рядом с far.exe, взятым тоже с сайта, удалить или отключить fexcept и воспроизвести падение - будет более адекватный диалог с кнопкой 'Stack', даже без отладчика.
Выглядит не слишком информативно

Code: Select all

╔═ Exception occurred ═╗
║ 0x66D81DDC           ║
╟──────────────────────╢
║        { OK }        ║
╚══════════════════════╝
Для плагина видимо нужен свой pdb?

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

LuaMacro: подземный стук..

Post by Shmuel » Tue 04 Oct, 2016 21:56

John Doe wrote: Exception occurred ... 0x66D81DDC
Не исключено, что причиной является какой-либо скрипт с использованием FFI, в котором производится доступ к освобождённому сборщиком мусора объекту. Подобный случай описан был здесь.

Почему такое предположение - во-первых нерегулярность проявления, во-вторых, у меня при испытаниях ("подобного случая") на Windows 7 x86 адрес исключения также начинался с 0x66D8.

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

LuaMacro: подземный стук..

Post by John Doe » Wed 05 Oct, 2016 07:43

Скрипты использующие ffi обязательно пересмотрю, но описанная проблема вряд ли с этим связана, поскольку воспроизводилась без ffi.

Что касается регулярности, то было 2 эпизода, падение происходило сразу на старте, и некоторое время стабильно воспроизводилось, даже на 2х системах, но потом неожиданно прекращалось..

Post Reply

Return to “Глюки и баги”