Отладка QUIK 8.11

Страницы: Пред. 1 2
RSS
Отладка QUIK 8.11
 
swerg,Так оно не работает, если запустить два разных скрипта, но с одной DLL.
У меня при этом остановка одного скрипта, останавливается второй скрипт.
Частично в том, чтобы использовать openlib и каждый раз переименовывать библиотеку.
 
Цитата
swerg написал:
мы должны иметь две полных структуры адресов Lua-API функций для разных версий Lua и вставлять проверку в каждую функцию библиотеку, доступную для Lua-скрипта, переключаясь на адреса нужной версии Lua для каждой интерфейсной функции нашей библиотеки....
Вот так в квике и сделано. Есть lua_getglobal51, lua_getglobal53, теперь и lua_getglobal54, и есть lua_getglobalX, которая из переданного стейта выуживает версию и дергает нужный вариант функции. И так все. Сам квик всегда использует lua_*X, для него разницы нет, в какой версии скрипт выполняется, если еще десяток версий добавят, основной код и не заметит. Честно говоря, думал, что это временное-переходное решение, но вот с добавлением 5.4 стало ясно, что так и останется.
 
Цитата
Александр написал:
lua_getextraspace - опять же надо загружать какую-то из этих DLL
Не то чтобы загружать, а получить хэндл. Если длл отсутствует, то и печалиться не о чем, она никак нас не могла запустить. Вот вариант извлечения прицепленной к стейту версии. Возвращает версию числом или 0, если ничего не удалось выудить. На 5.3 и 5.4 попробовал, 5.1 нет под рукой, чисто "а чо ей не работать-то".

Код
static int getVersionFromLuaState(lua_State * s)
{
   struct helper
   {
      struct extradata
      {
         lua_State * pstate;
         int luaver;
      };
      typedef const extradata ** (* pfn_getextradata)(lua_State *);
      static const extradata ** getextradata_default(lua_State *)
      {
         static const extradata ed = { 0 };
         static const extradata * ped = &ed;
         return &ped;
      }
      static pfn_getextradata init_getextradata(HMODULE hmod)
      {
         if(hmod)
         {
            FARPROC pfn = ::GetProcAddress(hmod, "luaI_getextraspace");
            if(pfn)
               return reinterpret_cast<pfn_getextradata>(pfn);
         }
         return getextradata_default;
      }
      static int extract_version(const extradata ** pped, lua_State * s)
      {
         if(pped)
         {
            const extradata * ped = *pped;
            if(ped)
            {
               if(s == ped->pstate)
                  return ped->luaver;
            }
         }
         return 0;
      }
      static int try51(lua_State * s)
      {
         static pfn_getextradata getextradata = init_getextradata(::GetModuleHandleW(L"lua5.1.dll"));
         return extract_version(getextradata(s), s);
      }
      static int try53(lua_State * s)
      {
         static pfn_getextradata getextradata = init_getextradata(::GetModuleHandleW(L"lua53.dll"));
         return extract_version(getextradata(s), s);
      }
      static int try54(lua_State * s)
      {
         static pfn_getextradata getextradata = init_getextradata(::GetModuleHandleW(L"lua54.dll"));
         return extract_version(getextradata(s), s);
      }
   };
   int result = helper::try54(s);
   if(!result)
   {
      result = helper::try53(s);
      if(!result)
         result = helper::try51(s);
   }
   return result;
}
 
И всё же.
Волшебно работать с какой-то одной версией - это поможет.
А вот с двумя разными одновременно в рамках одной dll...
 
Цитата
swerg написал:
Волшебно работать с какой-то одной версией - это поможет.А вот с двумя разными одновременно в рамках одной dll...
Тоже можно, хотя на самом деле я считаю, что создание одной универсальной длл - это создание себе геморроя. В том числе жаль, что арка пошла по этому пути, а не сделала отдельный плагин под каждую версию луа. Как говорится, сложность программы растет, пока не превысит способностей программиста, так зачем приближать этот момент.
 
Цитата
Anton написал:
Тоже можно

Вставляя проверялку в каждый интерфейсный метод библиотеки, я о чем я и писал сразу.
Оно, конечно, затраты на проверялку копеечные - фактически сравнить несколько интов (чем являются указатели) по готовым адресам, особенно если развернуть и убрать вызовы вложенных красивых функций.
Но синтаксически все загромождается и загромождается.
 
Цитата
swerg написал:
Вставляя проверялку в каждый интерфейсный метод библиотеки, я о чем я и писал сразу.
Да. Вот такой адок получается

 
 
Anton,Ни во всех версиях квика в луа библиотеке есть luaI_getextraspace
swerg, Первый способ: сделать 2 разные библиотеки для разных версий DLL.
Второй способ: сохранить указатели для каждой версии Lua DLL (сделать struct с указателями).
И в колбеках проверять, в какой версии Lua запущена библиотека и брать указатели (как вы и писали).
 
Anton,За способ определения версии спасибо. Проверил, рабочий.
 
Цитата
Александр М написал:
Цитата
swerg написал:
Хотелось бы уточнить у тех. поддержки про новую версию 8.11:

1) Зачем остался в дистрибутиве (в обновлении) файл lua5.1.dll  ? как он функционирует?!
Вроде его планировали убрать.

2) В списке исправленных недоработок есть несколько пунктов про Lua (пункты 10, 11, 12, 13)
Подразумевается, что указанные в них проблемы исправятся только при использовании Lua 5.4 ? или для Lua 5.3 они исправлены тоже?
1. Поддерживаю, не понятно для какой именно версии lua исправлены ошибки, перечисленные в списке обновлений.
2. Выбор версии Lua будет Вами поддерживаться и дальше или с какой-то версии вы перейдете строго на Lua 5.4.1?
3. Почему не 5.4.2?
Ну и что что баги и так сойдет ведь работа уже почти закончена))

Lua 5.4.2

No bugs have been reported.  

Lua 5.4.1  1    
  1. Key removed from a table during traversal may not be accepted by 'next'.
    reported by Xmilia Hermit on 11 Oct 2020. existed since 5.4.0. fixed in 5.4.2.

    Example:

    t = {} t["no" .. "ref1"] = 1 t["no" .. "ref2"] = 2  for k, v in pairs(t) do     t[k] = nil     print(k, v)     collectgarbage("collect") end  
                       
 
Придется переделывать
                       
 
https://www.lua.org/bugs.html#5.4.1-1
                       
 
Цитата
Евгений написал:
Key removed from a table during traversal may not be accepted by 'next'.
Очень похоже:
https://forum.quik.ru/messages/forum10/message49163/topic5802/#message49163

Цитата
TGB написал:
при существующей архитектуре обработки событий в QLua, уборка мусора в нем должна быть потокобезопасной
Наверное, придётся согласиться ))
Надо делать так, как надо. А как не надо - делать не надо.
 
Цитата
Старатель написал:
Очень похоже
Хотя, может, из другой оперы...
Надо делать так, как надо. А как не надо - делать не надо.
 
При сворачивании нижней области индикатора на графике исчезает шкала времени
                       
 
Цитата
Старатель написал:
Наверное, придётся согласиться ))
А у меня на эту тему есть вполне конкретный рац-бац однострочный
Код
LUA_API size_t luaI_gccount(lua_State * s)
{
   size_t result = 0;
   lua_lock(s);
   if(s && s->l_G) // ++
      result = (s->l_G->totalbytes + s->l_G->GCdebt) >> 10;
   lua_unlock(s);
   return result;
}
 
Здравствуйте.
swerg,
Цитата
swerg написал:
1) Зачем остался в дистрибутиве (в обновлении) файл lua5.1.dll  ? как он функционирует?!
В данную библиотеку не было привнесено каких-либо изменений, она по-прежнему присутствует в дистрибутивах условно, использовать её на новых версиях терминала невозможно, в будущем планируется исключить её.
Цитата
swerg написал:
2) В списке исправленных недоработок есть несколько пунктов про Lua (пункты 10, 11, 12, 13)Подразумевается, что указанные в них проблемы исправятся только при использовании Lua 5.4 ? или для Lua 5.3 они исправлены тоже?
П.10 исправлен только в lua54.dll, прочие доработки выполнены и для lua54.dll и для lua53.dll.
Андрей,
Цитата
Андрей написал:
В новом квике 8.11 не сохраняется checkbox "Получать обезличенные сделки с момента подключения", если нажать его и в этом же окне сохранить. Но сохраняется если перейти в другое окно и там нажать сохранить.(Настройки клиентского места-Программа-Получение данных-Обезличенные сделки)
Ваше обращение получено, проблема изучается. Постараемся в ближайшее время дать ответ.
Старатель,
Цитата
Старатель написал:
Lua 5.3.5 в QUIK 8.11 в  этом тесте  падает с ошибкой
Для библиотеки lua53.dll было устранено зависание рабочего места, однако причину ошибку ACCESS_VIOLATION in script удалось устранить только в lua54.dll.
TGB,
Цитата
TGB написал:
Новая версия  QUIK 8.11.0.66 (QLua 5.3) продолжает «падать» ( CQ02750791, CQ02779753, CQ02787899. CQ02802279) (CQ02809006)   Могу прислать поддержке дампы.
Просьба прислать новые полученные файлы *.dmp для анализа. Заранее большое спасибо.
Цитата
TGB написал:
1) ответьте, пожалуйста, зачем устраиваются скачки с новыми версиями Lua (очередная 5.4)? Какие проблемы при этом решаются?
2) есть ли понимание у разработчиков QUIK, что при существующей архитектуре обработки событий в QLua, уборка мусора в нем должна быть потокобезопасной?
1) Переход на новые версии LUA позволяет исключить необходимость/предоставляет возможность исправлять проблемы, обусловленные недоработками и не оптимальностями, характерными для устаревшей версии.
2) Для обеспечения потокобезопасности Вы можете использовать заранее подготовленные функции для работы с таблицами LUA, которые гарантируют потокобезопасность. Эти функции приведены руководстве по QLUA в разделе 8 – «Потокобезопасные функции для работа с таблицами Lua». Для прочих функций мы не гарантируем потокобезопасность.
Александр,
Цитата
Александр написал:
Вопрос к разработчикам, как понять в Lua Api в какой версии lua запущен скрипт и к какой версии библиотеки подключаться?
С нашей стороны решения для данной задачи не предусмотрено. Можем зарегистрировать Ваше пожелание на доработку.
 
Цитата
Andrey Bezrukov написал:
С нашей стороны решения для данной задачи не предусмотрено. Можем зарегистрировать Ваше пожелание на доработку.
Решение, описанное выше, вполне подходит. Можно его сделать основным. Да сделайте.
 
Цитата
Andrey Bezrukov написал:
Для прочих функций мы не гарантируем потокобезопасность.

 А для колбеков вы гарантируете их потокобезопасность?
Они же выполняются в отдельном потоке, в контексте скрипта пользователя, в котором работает и поток main.
А если если гарантируете, то чем?
 
Цитата
Евгений написал:
При сворачивании нижней области индикатора на графике исчезает шкала
Вот на это обратите внимание
                       
 
Цитата
...
Вы не ответили на мои вопросы:
1. В будущем будет строгий переход на 5.4 или поддержка 5.3 останется надолго?
2. Все-таки 5.4.1 или 5.4.2?
3. Я представил ссылку
https://sourceforge.net/projects/luabinaries/files/5.4.0/Tools%20Executables/lua-5.4.0_Win64_bin.zip...
С помощью данного инструментария можно компилировать скрипты для QUIK lua версии 5.4?
 
Александр,
Ваше пожелание зарегистрировано. Мы постараемся рассмотреть его и сообщить Вам результаты анализа. Впоследствии, по результатам анализа, будет приниматься решение о реализации пожелания в будущих версиях ПО.
TGB,
Именно для callback-функций потокобезопасность и гарантируется. Предлагаем ознакомиться с разделом 8 документации к интерпретатору LUA – «Потокобезопасные функции для работы с таблицами».
Евгений,
Ваше сообщение получено, проблема изучается. Постараемся в ближайшее время дать ответ.
Александр М,
1. В настоящем информации по данному вопросу нет.
2. Сейчас предусмотрена работа скриптов на lua5.3.5 и lua5.4.1. Если Вас интересует поддержка более поздних версий, например, lua5.4.2 – можем зарегистрировать Ваше пожелание. Регистрируем?
3. Данный вопрос предлагаем уточнить непосредственно у разработчиков данного инструментария с учётом того, что, по всей видимости, он предусматривает совместимость с lua5.4.0. Другой вариант – проверить совместимость самостоятельно, на практике. В случае подозрения на некорректную работу со стороны интерпретатора LUA в терминале QUIK – пожалуйста, сообщите. По вопросам эксплуатации представленных библиотек также предлагаем обращаться к их непосредственным разработчикам.
 
Цитата
Andrey Bezrukov написал:
3. Данный вопрос предлагаем уточнить непосредственно у разработчиков данного инструментария с учётом того, что, по всей видимости, он предусматривает совместимость с lua5.4.0. Другой вариант – проверить совместимость самостоятельно, на практике. В случае подозрения на некорректную работу со стороны интерпретатора LUA в терминале QUIK – пожалуйста, сообщите. По вопросам эксплуатации представленных библиотек также предлагаем обращаться к их непосредственным разработчикам.
Это не библиотеки, это стандартный компилятор Lua. Когда я у Вас спрашивал про точно такой-же аналогичный, но по версии 5.3.5, Вы отвечали, что именно им и пользуетесь для компиляции. Если по данному компилятору (по версии 5.4) Вы ответить не можете, то укажите, каким ПО компилировать скрипты под Вашу версию 5.4.1.
 
Возможно не в тему, но сам искал где же взять этот самый lua 5.4.1, на lua.org не нашел, но гугл выдал таки одну ссылку: https://joedf.ahkscript.org/LuaBuilds/
 
И да, мой скрипт, скомпилированный win64 компилятором взятым по ссылке выше, работает с выбором 5.4.1 в квике, и в параметрах самого скрипта также отображается эта версия.
 
Цитата
ISR написал:
Возможно не в тему, но сам искал где же взять этот самый lua 5.4.1, на lua.org не нашел, но гугл выдал таки одну ссылку:  https://joedf.ahkscript.org/LuaBuilds/
Несколько смущают размеры файлов по Вашей ссылке, они раза в 2 отличаются от тех, что по официальной ссылке.
Для примера картинка файлов официальных версий 5.35 и 5.40:

 
Цитата
Александр М написал:
Несколько смущают размеры файлов по Вашей ссылке
Согласен, меня то же смутил этот момент, как будто скомпилировано в дебаг'е (с информацией для отладки), но размер может быть увеличен и по каким то еще причинам. Но тем не менее скомпилированный скрипт работает. Разрабам квика все же, на мой взгляд, стоило бы заботиться о клиенте, можно было бы ссылку в доку добавить, или вовсе win32/64 компиляторы подкинуть, благо пока они места много не едят.
По самой работе же 8.11 и моим скриптом скомпиленым под 5.4.1. за сегодня еще ни разу не упало, в то время как на предыдущей версии 8.09 по нескольку раз за день, устал уже перезапускать.
 
Цитата
ISR написал:
как будто скомпилировано в дебаг'е (с информацией для отладки)
Да, dwarf внутри, собрано с mingw.
 
Цитата
ISR написал:
Цитата
Александр М написал:
Несколько смущают размеры файлов по Вашей ссылке
Согласен, меня то же смутил этот момент, как будто скомпилировано в дебаг'е (с информацией для отладки), но размер может быть увеличен и по каким то еще причинам. Но тем не менее скомпилированный скрипт работает. Разрабам квика все же, на мой взгляд, стоило бы заботиться о клиенте, можно было бы ссылку в доку добавить, или вовсе win32/64 компиляторы подкинуть, благо пока они места много не едят.
По самой работе же 8.11 и моим скриптом скомпиленым под 5.4.1. за сегодня еще ни разу не упало, в то время как на предыдущей версии 8.09 по нескольку раз за день, устал уже перезапускать.
Все-таки хотелось бы получить официальный ответ от разработчиков, по поводу компилятора под их версию lua.

По моим наблюдениям на сегодняшний день самая стабильная версия 8.8.4.3, у меня ни разу не упала, работает круглосуточно.
 
Так-то компилятор (одного файла) выглядит вот так и запускается в самом квике (куда уж совместимее-то)
Код
-- compilation arguments
local srcname = getScriptPath() .. '\\test.lua'
local dstname = getScriptPath() .. '\\test.out'
local strip_debug_info = false

-- the compiler itself
function main()
   local chunk, err = loadfile(srcname, 't')
   if nil == chunk then
      error('Compilation error:\n' .. err)
   end
   local bin = string.dump(chunk, strip_debug_info)
   local f = io.open(dstname, 'wb')
   if nil == f then
      error('Unable to create the destination file')
   end
   f:write(bin)
   f:flush()
   f:close()
end
 
Неинтересный вариант. Его нельзя в bat файл засунуть
www.bot4sale.ru

Пасхалочка для Алексея Иванникова: https://forum.quik.ru/messages/forum10/message63088/topic7052/#message63088
 
Цитата
Anton написал:
Так-то компилятор (одного файла) выглядит вот так и запускается в самом квике
Скомпилил библиотеку в 4к строк данным скриптом и в luac54.exe по ссылке выше. Результаты совпадают до байта.
Надо делать так, как надо. А как не надо - делать не надо.
 
Цитата
Старатель написал:
Результаты совпадают до байта.
А если нет разницы, зачем платить больше )
 
Цитата
Anton написал:
А если нет разницы, зачем платить больше )
Интересный вариант, спасибо за инфу :)

2ARQA: Насчет работы квика 8.11 - вроде не падает, но кажется как будто ресурсов жрет многовато: 1.5Гига памяти и 20-30% проца (I5 из первых) сразу после старта и далее не снижается (15 вкладок 46 окон).
 
Цитата
s_mike@rambler.ru написал:
Неинтересный вариант. Его нельзя в bat файл засунуть

https://github.com/swerg/qlua-exe
Сгодится для батничка?
 
Цитата
swerg написал:
Цитата
s_mike@rambler.ru написал:
Неинтересный вариант. Его нельзя в bat файл засунуть

https://github.com/swerg/qlua-exe
Сгодится для батничка?
опа.

замечательно.
www.bot4sale.ru

Пасхалочка для Алексея Иванникова: https://forum.quik.ru/messages/forum10/message63088/topic7052/#message63088
 
Александр М,
Цитата
Александр М написал:
укажите, каким ПО компилировать скрипты под Вашу версию 5.4.1.
Каких-либо строгих требований к используемому компилятору со стороны lua5.4.1 в QUIK, кроме совместимости версий - нет, соответственно, можно использовать любой компилятор, который считаете подходящим в остальных отношениях.

ISR,
Цитата
ISR написал:
2ARQA: Насчет работы квика 8.11 - вроде не падает, но кажется как будто ресурсов жрет многовато: 1.5Гига памяти и 20-30% проца (I5 из первых) сразу после старта и далее не снижается (15 вкладок 46 окон).
Просьба уточнить, какие конфигурации сравниваете? QUIK 8.11 + lua5.4.1 (или ua5.3.5?) и QUIK 8.8.4 + lua5.3.5, верно, или иная конфигурация? Есть ли возможность снять файлы дампа с info.exe в процессе работы терминала и скриптов в нём, во время роста потребления памяти и прислать их нам для анализа? Если это возможно - просьба также предоставить минимальные и достаточные для воспроизведения фрагменты используемых скриптов и архив рабочего места без ключей.
Запрошенные данные просьба присылать по адресу quiksupport@arqatech.com со ссылкой на данную ветку форума.
Заранее большое спасибо.
 
Андрей,

Ваша проблема была изучена. Ошибка была найдена и будет исправлена в одной из следующих версий. Приносим извинения за доставленные неудобства.
 
Цитата
Евгений написал:
Цитата
Евгений написал:
При сворачивании нижней области индикатора на графике исчезает шкала
Вот на это обратите внимание
Добрый день!
Ошибка, описанная в данном инциденте, будет исправлена в одной из очередных версий программы.Приносим извинения за причиненные неудобства.
 
Андрей, добрый день!
Цитата
Андрей написал:
В новом квике 8.11 не сохраняется checkbox "Получать обезличенные сделки с момента подключения", если нажать его и в этом же окне сохранить. Но сохраняется если перейти в другое окно и там нажать сохранить.(Настройки клиентского места-Программа-Получение данных-Обезличенные сделки)
Описанная в данном инциденте ошибка была исправлена в версии 8.12.0 терминала QUIK.
Рекомендуем вам обновить версию программы.

Приносим извинения за причиненные неудобства.
 
Ни у кого не было проблем с подключением dll, собранных под 5.4?

Я собрал одну библиотеку, в чистом lua она работает корректно. При подключении к Квик получаю ACCESS VIOLATION.

include файлы и lua54.lib взято с оф. сайта lua. Правда там нет 5.4.1, только 5.4.0 release 2 и 1
 
Цитата
Nikolay написал:
include файлы и lua54.lib взято с оф. сайта lua.
  Не точно, но возможно, вы взяли статическую библиотеку  lua54.lib (~300 кб.). Надо использовать библиотеку импорта dll    lua54.lib (~30 кб.) с тем, чтобы использовались функции QUIK из его lua54.dll. Либо надо самому создать библиотеку импорта lua54.lib, используя lua54.dll из QUIK.
 
Пришлось собрать lua, чтобы заработало. Да уж. Опять возникает вопрос: ну почему не 5.4.2, на который уже есть бинарники.
 
Цитата
TGB написал:
Цитата
Nikolay написал:
include файлы и lua54.lib взято с оф. сайта lua.
   Не точно, но возможно, вы взяли статическую библиотеку  lua54.lib (~300 кб.). Надо использовать библиотеку импорта dll    lua54.lib (~30 кб.) с тем, чтобы использовались функции QUIK из его lua54.dll. Либо надо самому создать библиотеку импорта lua54.lib, используя lua54.dll из QUIK.
Возможно. Но, как написал, просто сам собрал.
 
Цитата
Nikolay написал:
Ни у кого не было проблем с подключением dll, собранных под 5.4?
Я собрал одну библиотеку, в чистом lua она работает корректно. При подключении к Квик получаю ACCESS VIOLATION.
Как пример, откуда можно все требуемое потырить
https://quik2dde.ru/viewtopic.php?id=78
 
Цитата
Nikolay написал:
Цитата
TGB написал:
 
Цитата
Nikolay  написал:
include файлы и lua54.lib взято с оф. сайта lua.
    Не точно, но возможно, вы взяли статическую библиотеку  lua54.lib (~300 кб.). Надо использовать библиотеку импорта dll    lua54.lib (~30 кб.) с тем, чтобы использовались функции QUIK из его lua54.dll. Либо надо самому создать библиотеку импорта lua54.lib, используя lua54.dll из QUIK.
Возможно. Но, как написал, просто сам собрал.
Собрал Lua 5.4.1, не работает. Файл lua54.lib производится динамический (30кб). Использовал вот такой скрипт:
Код
cl /MD /O2 /c /DLUA_BUILD_AS_DLL *.c
ren lua.obj lua.o
ren luac.obj luac.o
link /DLL /IMPLIB:lua54.lib /OUT:lua54.dll *.obj
link /OUT:lua.exe lua.o lua54.lib
lib /OUT:lua54-static.lib *.obj
link /OUT:luac.exe luac.o lua54-static.lib
 
Собрал всё для Lua 5.4 а QUIK по-умолчанию запускает под 5.3. Вопрос снят, всё работает.
Страницы: Пред. 1 2
Читают тему
Наверх