Я готовлю большой проект - виртуальную машину OpenComputers для OpenOS, и уже достиг некоторых успехов. Но появилась серьёзная проблема:
Запустив MineOS своей виртуальной машиной и открыв там приложение palette, после пика любого цвета возникает ошибка
Заранее извиняюсь за скриншот ошибки, но отлов и сохранение её в текстовом виде занял бы много времени.
Ошибка возникает когда что-то пытается открыть файл /home/VirtualMachine1/mineos/lib/process.lua
В том месте, где это происходит, - в функции filesystem.lines апи MineOS, я дампнул стек вызовов. Вот он:
stack traceback:
/Libraries/Filesystem.lua:572: in field 'lines'
/Libraries/System.lua:2174: in field 'error'
/OS.lua:231: in main chunk
[C]: in function 'xpcall'
machine:799: in global 'xpcall'
virtual_bios:179: in upvalue 'executeString'
virtual_bios:219: in upvalue 'boot'
virtual_bios:473: in local 'tryBootFromAny'
virtual_bios:485: in main chunk
[C]: in function 'xpcall'
machine:799: in global 'xpcall'
/usr/lib/libvm.lua:110: in method 'start'
/usr/bin/vm.lua:40: in main chunk
(...tail calls...)
[C]: in function 'xpcall'
machine:799: in global 'xpcall'
/lib/process.lua:63: in function </lib/process.lua:59>
Из него становится ясно, что инициатором сего действия является библиотека OpenOS - /lib/process.lua.
Тут надо немного объяснить, как вообще работает файловая система в моей виртуальной машине:
Фактически, она полностью имитирует компонент файловой системы, но ограничивает её до конкретной директории. Простыми словами, open ("/test.txt") превращается в open ("/home/VirtualMachine1/mineos/test.txt"). То же самое происходит и здесь: система пытается открыть файл "/lib/process.lua", который действительно существует, но виртуальный компонент превращает его в "/home/VirtualMachine1/mineos/lib/process.lua".
Кажется, всё и так понятно. Но с чего майноси вообще открывать системный файл OpenOS?
Тут в дело вступает трейсбек, который говорит, что нечто происходит в 63 строке модуля process. Вот ссылка на эту самую строку в гитхабе.
Здесь используется coroutine.create, которая, видимо, исполняет переданную ей функцию при пике цвета в палитре MineOS. Это всё, что мне удалось выяснить, и я понятия не имею, что с этим делать. Корутины и как они работают я знаю меньше всего из lua и opencomputers, так что буду очень рад помощи.
Я готовлю большой проект - виртуальную машину OpenComputers для OpenOS, и уже достиг некоторых успехов. Но появилась серьёзная проблема:
Запустив MineOS своей виртуальной машиной и открыв там приложение palette, после пика любого цвета возникает ошибка
Заранее извиняюсь за скриншот ошибки, но отлов и сохранение её в текстовом виде занял бы много времени.
Ошибка возникает когда что-то пытается открыть файл /home/VirtualMachine1/mineos/lib/process.lua
В том месте, где это происходит, - в функции filesystem.lines апи MineOS, я дампнул стек вызовов. Вот он:
Из него становится ясно, что инициатором сего действия является библиотека OpenOS - /lib/process.lua.
Тут надо немного объяснить, как вообще работает файловая система в моей виртуальной машине:
Фактически, она полностью имитирует компонент файловой системы, но ограничивает её до конкретной директории. Простыми словами, open ("/test.txt") превращается в open ("/home/VirtualMachine1/mineos/test.txt"). То же самое происходит и здесь: система пытается открыть файл "/lib/process.lua", который действительно существует, но виртуальный компонент превращает его в "/home/VirtualMachine1/mineos/lib/process.lua".
Кажется, всё и так понятно. Но с чего майноси вообще открывать системный файл OpenOS?
Тут в дело вступает трейсбек, который говорит, что нечто происходит в 63 строке модуля process. Вот ссылка на эту самую строку в гитхабе.
Здесь используется coroutine.create, которая, видимо, исполняет переданную ей функцию при пике цвета в палитре MineOS. Это всё, что мне удалось выяснить, и я понятия не имею, что с этим делать. Корутины и как они работают я знаю меньше всего из lua и opencomputers, так что буду очень рад помощи.
Изменено пользователем AnonПоделиться сообщением
Ссылка на сообщение
Поделиться на других сайтах