LuaTmpPanel plugin и его (ограниченная) поддержка

Место, где разработчики плагинов могут поделиться своим опытом.
User avatar
citRiks
Posts: 1733
Joined: Fri 25 Oct, 2019 18:18
Has thanked: 610 times
Been thanked: 102 times

Хочу поучиться.

Post by citRiks »

Latest post of the previous page:

Теперь ЛуаТмпПанель не падает при Get/SetUserScreen() в LuaFar_Init.Lua
Cледующий на очереди LFSearch, падает похожим образом,
при открытии ФАРа в режиме редактора\просмотра, на чистом профайле:

Code: Select all

╔══════════════════════════════ Exception occurred ══════════════════════════════╗
║ Exception:   0xC0000005 - EXCEPTION_ACCESS_VIOLATION                           ║
║ Details:     Memory at 0000000000000000 could not be read                      ║
║ errno:       0x00000000 - No error                                             ║
║ LastError:   0x00000057 - The parameter is incorrect.                          ║
║ NTSTATUS:    0xC0000034 - Object Name not found.                               ║
║ Address:     0x13FB86739 - Far.exe!<unknown> (get the pdb)                     ║
║ Source:                                                                        ║
║ Function:    SetStartupInfoW                                                   ║
║ Module:      C:\Program Files\Far Manager\Plugins\LFSearch\lfsearch_e-x64.dll  ║
║ Version:     3.0.0.5555 x64 (f63d6fa)                                          ║
║ OS:          6.1.7601.2.1.0.256.1                                              ║
╟────────────────────────────────────────────────────────────────────────────────╢
║              { Unload plugin } [ Stack ] [ Minidump ] [ Ignore ]               ║
╚════════════════════════════════════════════════════════════════════════════════╝
Last edited by citRiks on Mon 17 Feb, 2020 10:21, edited 1 time in total.
User avatar
citRiks
Posts: 1733
Joined: Fri 25 Oct, 2019 18:18
Has thanked: 610 times
Been thanked: 102 times

Хочу поучиться.

Post by citRiks »

Поможет ли вашей диагностике если я поставлю себе PDB, или речь про тот же самый баг?
Впрочем сейчас все равно поставлю PDB, вреда от них не будет
Если баг тот же, то эта ваша новая DLL послужит заменой и в этом Плагине (LFSearch)?
Продолжать обсуждение здесь или в обсуждении LFSearch?
Или может лучше создать новую общую тему что-то вроде "Архив и поддержка LuaPluginDll @ShmuelZ" ?
Потому что я так подозреваю что следующим на очереди падать будет ЛуаМакроПанель (viewtopic.php?f=60&t=8334),
и еще есть luafar4editor (lf4ed), и etc.
..?
Last edited by citRiks on Mon 17 Feb, 2020 10:36, edited 2 times in total.
User avatar
citRiks
Posts: 1733
Joined: Fri 25 Oct, 2019 18:18
Has thanked: 610 times
Been thanked: 102 times

Хочу поучиться.

Post by citRiks »

C PDB:

Что интересно, кажется что LFSearch и LF4Ed падают по очереди в рандомном порядке
Last edited by citRiks on Mon 17 Feb, 2020 10:38, edited 3 times in total.
Shmuel
Posts: 6815
Joined: Thu 23 Mar, 2006 21:36
Location: Israel
Has thanked: 41 times
Been thanked: 526 times

Хочу поучиться.

Post by Shmuel »

citRiks wrote: Mon 17 Feb, 2020 10:20 Cледующий на очереди LFSearch, падает похожим образом,
при открытии ФАРа в режиме редактора\просмотра, на чистом профайле:
Как я уже говорил выше, это не баг плагина, а скорее некоторая недоработка Фара (баг это или не баг, вопрос личного мнения).
Убирать из LF Search вызов luafar_init.lua планов пока нет. А вы впоолне можете убрать из этого файла вызовы функций panel.XX, которые валят Фар.
citRiks wrote: Mon 17 Feb, 2020 10:23 Или может лучше создать новую общую тему что-то вроде "Архив и поддержка LuaPluginDll @ShmuelZ" ?
Пожалуйста, не надо, у меня не так много времени.
User avatar
citRiks
Posts: 1733
Joined: Fri 25 Oct, 2019 18:18
Has thanked: 610 times
Been thanked: 102 times

Хочу поучиться.

Post by citRiks »

Shmuel,
Ну я мог бы туда собрать рзные уже знакомые мне кейсы, связанные темы и цитаты, и отвечать на вопросы
да и ответ "limited support, экспериментируйте сами" тоже вполне себе ответ, его можно там же озвучить, и мною тоже.
Смысл - это ознакомиться с вашим кодом, и или приспособить его или использовать как есть.
С "лежащим" кодом сложнее знакомиться, вот и стараюсь собрать и поднять
Опять же, может быть и не столько для себя, сколько для желающих приобщиться.
Настаивать не буду, да и попробую сейчас унять свою активность в этом направлении.. ))
Спасибо еще раз.
Shmuel
Posts: 6815
Joined: Thu 23 Mar, 2006 21:36
Location: Israel
Has thanked: 41 times
Been thanked: 526 times

Хочу поучиться.

Post by Shmuel »

citRiks, я не могу вам запретить создавать новые темы, хотите - создавайте. Просто мне кажется, что в рамках существующих тем тоже можно успешно взаимодействовать.
User avatar
DrKnS
Posts: 6114
Joined: Thu 04 Aug, 2005 06:44
Location: Kyiv
Has thanked: 12 times
Been thanked: 426 times

LuaTmpPanel plugin и его (ограниченная) поддержка. Тема смежная с другими DLL-зависимыми Lua plugins. Авторство @ShmuelZ

Post by DrKnS »

Shmuel wrote: Mon 17 Feb, 2020 10:37 это не баг плагина, а скорее некоторая недоработка Фара (баг это или не баг, вопрос личного мнения)
А в чем именно дело?
Shmuel
Posts: 6815
Joined: Thu 23 Mar, 2006 21:36
Location: Israel
Has thanked: 41 times
Been thanked: 526 times

LuaTmpPanel plugin и его (ограниченная) поддержка. Тема смежная с другими DLL-зависимыми Lua plugins. Авторство @ShmuelZ

Post by Shmuel »

DrKnS wrote: Mon 17 Feb, 2020 11:39 А в чем именно дело?
Смотрите, начиная отсюда и далее.
Если коротко, то плагин при инициализации вызывает внешний файл %FARPROFILE%\luafar_init.lua (если тот существует). citRiks поместил в этот файл вызовы FCTL_XX и запускает Фар с ключом /e или /v. У Фара панели не созданы, и он падает.
User avatar
citRiks
Posts: 1733
Joined: Fri 25 Oct, 2019 18:18
Has thanked: 610 times
Been thanked: 102 times

LuaTmpPanel plugin и его (ограниченная) поддержка. Тема смежная с другими DLL-зависимыми Lua plugins. Авторство @ShmuelZ

Post by citRiks »

Я еще дооформил статью (заглавный пост), по-моему получилось довольно мило? :roll:
Last edited by citRiks on Mon 17 Feb, 2020 12:30, edited 1 time in total.
User avatar
DrKnS
Posts: 6114
Joined: Thu 04 Aug, 2005 06:44
Location: Kyiv
Has thanked: 12 times
Been thanked: 426 times

LuaTmpPanel plugin и его (ограниченная) поддержка. Тема смежная с другими DLL-зависимыми Lua plugins. Авторство @ShmuelZ

Post by DrKnS »

Shmuel wrote: Mon 17 Feb, 2020 11:56 citRiks поместил в этот файл вызовы FCTL_XX и запускает Фар с ключом /e или /v. У Фара панели не созданы, и он падает
Shmuel wrote: Sat 15 Feb, 2020 17:09 Фар мог бы проверять ситуацию в функциях FCTL_XX.

Плагинописатель может проверить ситуацию вручную:
FCTL_CHECKPANELSEXIST wrote: Функция возвращает FALSE, если Far Manager запущен с ключами /e или /v (в качестве внешнего редактора или программы просмотра). В этом режиме панели не создаются.

Внимание!
В режиме, когда Far Manager запущен с ключами /e или /v, функция обрабатывает только команды FCTL_CHECKPANELSEXIST, FCTL_GETUSERSCREEN и FCTL_SETUSERSCREEN.
Far тоже проверяет ситуацию и возвращает 0, если панелей нет.

Т.е. здесь:
citRiks wrote: Sat 15 Feb, 2020 17:32 А проблемный luafar_init.lua у меня теперь такой:

Code: Select all

panel.GetUserScreen()
panel.SetUserScreen()
И стоит его лишь убрать, то все происходит гладко и всегда..
- всё должно работать.

Однако, тут всё куда веселее:
- открытие редактора
- посылка EE_REDRAW
- lfsearch_e-x64.dll загружается и исполняет luafar_init.lua
- скрипт вызывает FCTL_GETUSERSCREEN
- перерисовка редактора
- посылка EE_READ
- загружается lftmppanel.dll и снова исполняет luafar_init.lua
- скрипт вызывает FCTL_GETUSERSCREEN, но предыдущий вызов еще не завершен
- нарушение инварианта, разыменование nullptr, падение.



Т.е. да, проблема как бы есть, но к обработке FCTL_ в режиме редактора относится мало.
Это, скорее, последствия 4673 и того, что всё теперь перерисовывается всегда.

@zg, учитывая, что user screen всегда полноэкранный, надо ли нам перерисовывать то, что под ним?
Shmuel
Posts: 6815
Joined: Thu 23 Mar, 2006 21:36
Location: Israel
Has thanked: 41 times
Been thanked: 526 times

LuaTmpPanel plugin и его (ограниченная) поддержка. Тема смежная с другими DLL-зависимыми Lua plugins. Авторство @ShmuelZ

Post by Shmuel »

DrKnS wrote: Mon 17 Feb, 2020 13:19 Плагинописатель может проверить ситуацию вручную:
Вы, видимо, имели в виду скриптописателя, создающего luafar_init.lua. Этот файл не является составляющей плагина, это внешний файл.
DrKnS wrote: Mon 17 Feb, 2020 13:19 Однако, тут всё куда веселее:
Моё предположение о причинах падения было "на пальцах", без какого-либо исследования (тем более, что у меня не падало).
Shmuel
Posts: 6815
Joined: Thu 23 Mar, 2006 21:36
Location: Israel
Has thanked: 41 times
Been thanked: 526 times

LuaTmpPanel plugin и его (ограниченная) поддержка. Тема смежная с другими DLL-зависимыми Lua plugins. Авторство @ShmuelZ

Post by Shmuel »

citRiks wrote: Mon 17 Feb, 2020 12:29 Я еще дооформил статью (заглавный пост), по-моему получилось довольно мило?
Всё это субъективно, я бы предпочёл, чтобы не заострялось внимание на авторе плагина (ведь обсуждается плагин, а не его автор).
Также, о вкусах не спорят, но у меня аллергия на очень длинные заголовки тем и имена файлов.

P.S. Почитал я снова заголовок и первый пост и скажу вам следующее: будьте добры, уберите все упоминания об авторе. Если это не будет сделано, я в эту тему ни ногой.
Last edited by Shmuel on Mon 17 Feb, 2020 16:47, edited 1 time in total.
Shmuel
Posts: 6815
Joined: Thu 23 Mar, 2006 21:36
Location: Israel
Has thanked: 41 times
Been thanked: 526 times

LuaTmpPanel plugin и его (ограниченная) поддержка

Post by Shmuel »

citRiks wrote: Mon 17 Feb, 2020 18:32 Сделал, так лучше?
Да, спасибо.
User avatar
DrKnS
Posts: 6114
Joined: Thu 04 Aug, 2005 06:44
Location: Kyiv
Has thanked: 12 times
Been thanked: 426 times

LuaTmpPanel plugin и его (ограниченная) поддержка

Post by DrKnS »

Shmuel wrote: Mon 17 Feb, 2020 13:40 Вы, видимо, имели в виду скриптописателя, создающего luafar_init.lua. Этот файл не является составляющей плагина, это внешний файл.
Я имел в виду то, что Plugin API позволяет проверить ситуацию менее перректально, чем "можно предусмотреть на стадии загрузке Плагина в Луа-Коде проверить параметры запуска ФАРа, и если там есть "-e/-v", то выходим", а в документации явно перечислены команды, работа которых гарантируется даже при отсутствии панелей.
Post Reply

Return to “Разработка плагинов”