Page 1 of 2

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

Posted: Wed 24 Aug, 2016 09:20
by John Doe
Какая-то странная ошибка, вызванная совокупностью факторов.
С одной стороны, какая-то ошибка скорее всего в моих скриптах (а точнее в модуле), потому что без них не проявляется.
С другой стороны, если luamacro единственный плагин, то не воспроизводится.

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

Иногда лог более подробный, см. вложение

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

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

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

Posted: Wed 24 Aug, 2016 09:42
by John Doe
Пока пробую максимально изолировать условия..

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

Code: Select all

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


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

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

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

Posted: Wed 24 Aug, 2016 14:23
by Shmuel
John Doe
На всякий случай обновил LuaJIT 2.0.4 до текущего состояния. Там за 15 месяцев после релиза был ряд фиксов.

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

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

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

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

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

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

Posted: Wed 24 Aug, 2016 20:24
by John Doe
Постараться убрать лишнее да, я могу, и уже выявил минимальный набор скриптов (3).
Но поскольку ошибка не в скрипте, то найти её у меня никак не получится.
Например изменяю порядок выполнения 2х никак не связанных участков кода - и уже не падает.

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

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

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

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

Posted: Wed 24 Aug, 2016 20:33
by HaRT
John Doe, а Вы Фар у себя собираете? Воспроизводится ли, если Фар собран в отладочной конфигурации (Debug)?
Впрочем, даже и в релизе, если подложить Far.pdb рядом с Far.exe (очень важно, чтобы они были для одной и той же сборки), запустить Фар из-под отладчика (например, Microsoft Visual Studio) и воспроизвести падение, то должно ввалиться в отладчик, и там может быть информативный Call Stack (из Visual Studio его можно скопировать в виде текста).

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

Posted: Wed 24 Aug, 2016 20:55
by John Doe
Shmuel
jit.off не влияет
Набор завтра подготовлю

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

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

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

Posted: Wed 24 Aug, 2016 21:03
by DrKnS
Если положить far.pdb с сайта рядом с far.exe, взятым тоже с сайта, удалить или отключить fexcept и воспроизвести падение - будет более адекватный диалог с кнопкой 'Stack', даже без отладчика.

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

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

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

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

Code: Select all

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

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

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

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