Igor
А что такое Bus error и откуда он лезет я понятия не имею
Snusmumriken
Надо гуглить и трейсбекать.
Igor
Тем не менее я доволен некоторыми своими библиотеками, они очень удобными получились
Igor
Круть, но велосипедостроительство : )
Igor
те же вебсокеты
Igor
https://github.com/igor725/LuaClassic/blob/master/lua/network/websocket.lua
Igor
Над ними ещё работать и работать, но то что есть уже меня радует
Igor
Есть какие-нибудь способы отладки LuaJIT удобные? GDB мне вообще никакой полезной инфы не давал никогда, даже с LuaJIT скомпиленным с флагами для JIT-отладки
Igor
Надо гуглить и трейсбекать.
Igor
Хотелось бы, чтобы в момент краша можно было отследить, что в данный момент делал lua_State
Igor
Всё что можно обгуглил, ничего не нашёл
Snusmumriken
Есть тупой способ и сложный. Тупой — расставить повсюду принты (на обеих сторонах), посмотреть после какого принта падает.
Snusmumriken
Сложный — запустить в дебаггере типа vs.
Igor
Да мне и VS особо ничего полезного не давал, кидал в какую-то глушь ассемблерного кода и ничего больше не говорил
Igor
Даже в lua_State заглянуть нельзя было
Snusmumriken
Ну тупой способ работает всегда, но только это надо сесть и отладить. Долго но зато с гарантией.
Igor
А принтами отлаживать это очень долго в моём случае
Igor
Особенно если учесть, что одна и та же ошибка может не появляться несколько дней
Igor
И что её триггерит понять крайне сложно
Igor
Ещё своей сложности добавляет то, что на Win ошибка может не происходить, а на Linux только так и летит
Snusmumriken
Вот поэтому добавляем сразу гору принтов сразу на обеих сторонах, хе
Igor
Ну у меня есть библиотека логирования и я ей прикрутил debug-режим, у меня по всему коды раскиданы наводящие дебаг-принты, но это редко спасает
Igor
Возможно, кстати, у меня LuaJIT с оптимизациями даже в дебаге по какой-то причине собирался
Igor
Это тоже неплохо так влияет на вывод дебаггера
🐅🤦♂️
Igor
У меня даже было такое, что ошибка происходила на одной arm-машине, но не происходила на другой, с той же архитектурой. У меня создавалось несколько char array'ев с размером около трёхста мегов и когда скрипт пытался получить их адрес прога падала, из-за того что адрес я записывал не в uintptr_t а в intptr_t
Igor
ой, что я там только не делал
Igor
Можешь показать, как кастовал?
Igor
пытался через a = ffi.cast('void*', file), также лез в код LuaJIT находил структуру файла, дефайнил её в ffi и пытался файл в неё кастануть и вытащить оттуда сишный поинтер на файл
Igor
но все мои потуги приводили только к сегфолтам
Igor
Вот, по быстрому накидал, что-то типа такого делал
Igor
Тем не менее, когда передаёшь file именно в сишную функцию он его кастует верно
Snusmumriken
У меня есть подозрение, что ты в целом слишком много кастуешь.
Igor
Но делает это какими-то внутренними функциями, которые из под ffi недоступны
Snusmumriken
С uintptr_t и intptr_t оно падало по совершенно конкретной причине: потому что у intptr_t есть один бит, который отвечает за "знак", то есть если пытаться обращаться к данным по этому указателю (например копировать большие объёмы), значение указателя может внезапно уйти в минус. Это нифига не круто, как ты понимаешь : )
Igor
Да, но я просто думал, что из-за того что в Lua доступно то всего 2 гига и размеченная память не успеет уйти в минус и оставил intptr_t
Igor
к тому же на x86 всё норм был
Igor
и на других машинах
Igor
падало только именно у меня на телефоне
Igor
правда у меня телефон armv8 с поддержкой v7 инструкций
Snusmumriken
Хех, ну как сказать. Зависит от стандартной библиотеки. И от byte order.
Snusmumriken
Грубо говоря, чтобы так писать нужно сначала на отлично научиться катать на сишке, а потом уже калякать, чтобы понимать что и почему происходит.
Я прост с луёв попробовал чисто гугло-методом катать на сишке с ffi, и у меня всё ломалось, пока я не натянул худо-бедно сишку. И то, я не писал ничего сложного.
Igor
Кстати, кто-нибудь имел дело с C4Droid?
Igor
Я пытался через него скомпилить LuaLanes, но он меня матами покрывал, мол pthread найти не может
Igor
Хотя в папке инклудов имелся pthread.h и в папке библиотек .so файл
Snusmumriken
Ну значит там неполная либа линуксовых тредов, попробуй найти и поставить.
Igor
не, он говорит что именно не может найти библиотеку, писал что аргумент линковщику -lpthread неверный
Igor
я даже DosBox через него смог скомпилить
Igor
но не LuaLanes
Snusmumriken
Тады собери ))
Прост сомнительно что ты там же найдёшь тот же windows.h, например. Вероятнее всего там чисто стандартная сишная либа (она маленькая), а остальное надо ставить и линковать.
Igor
Igor
Как-то так
Igor
тем не менее в окружении gcc имеется pthread, но он её в упор не видит
Igor
фиг знает почему
Snusmumriken
Добавь пути.
Snusmumriken
Мб не видит потому что другая процессорная архитектура или разрядность.
Igor
pthread.so лежит в той же папке, что и libm, например, его он уже спокойно линкует и всё ок
Igor
эти пути уже сам разработчик C4Droid все прописал, я дату приложения особо не трогал
Igor
Только проверил,чтобы пути были валидными и проверил имеется ли pthread.so
Snusmumriken
Igor
Для меня, кстати, было открытием то, что Lua-строку можно кастануть в char* и изменять её уже как массив
Snusmumriken
Лучше так не делать.
Igor
Ну вообще можно, если не задевать байты за строкой
Igor
В некоторых случаях может быть полезно, но пока мне не пригождалось
Snusmumriken
Igor
Я вообще много чего запретного и граничащего с безумием делаю
Igor
А после по горло в сегфолтах сижу
Snusmumriken
Igor
хахахаха
Igor
Да
Igor
Только получить его нужно в другом потоке уже
Igor
В одном потоке если это всё делается, то JIT сам его превращает в поинтер
Igor
Правда это только в версии 2.0.0-beta11 появилось
Snusmumriken
В сурцах openresty иногда используются касты, вот как делают со строками, например.
1. Такое происходить офигеть как редко
2. Каст в конкретный тип с указанием размеров (там ещё с учётом \0)
3. Только если прям очень надо, с учётом всей побочной фигни
Snusmumriken
Карочи, есть такие штуки, которыми не стоит пользоваться пока не разобрался. Разбираться — экспериментально на чём-то некритичном и чтением доки. А то выдали волшебное слово которое превращает что угодно во что угодно, и айда им размахивать, как будто типизации не существует ))
🐅🤦♂️
Подскажите онлайн Луа интерпретатор удобный.
Snusmumriken
Ууу сложна. Тебе repl?
Snusmumriken
И да, зочем?
Igor
Ну вот, например
https://repl.it/languages/lua
https://www.lua.org/cgi-bin/demo