Встроенный скрипт удаленной отладки ZeroBrane - PullRequest
0 голосов
/ 11 декабря 2018

Я работаю над приложением обработки изображений в Embarcadero C ++ Builder XE10.2, которое выполняет сценарии Lua.Я использую LuaJIT с FFI для обмена данными изображения.Все отлично работаетЯ скачал ZeroBrane studio и попытался выяснить, могу ли я отлаживать сценарии, выполняемые из приложения C ++ "host", поэтому я включил

package.path = package.path .. ";C:/Portable_App/ZeroBraneStudio/lualibs/mobdebug/?.lua"
package.cpath = package.cpath .. ";C:/Portable_App/ZeroBraneStudio/bin/clibs/?.dll"
require("mobdebug").start()

перед вызовом любой функции в сценарии.Однако, когда скрипт загружается и выполняется (на стороне C ++):

FResult = lua_pcall(FLs, 0, 0, 0);

хост-программа аварийно завершает работу с исключением «деление с плавающей точкой на ноль».Вылетает на

require("mobdebug").start()

Без этой строки скрипт работает нормально.Любая подсказка?

1 Ответ

0 голосов
/ 11 декабря 2018

Невозможно определить, что может пойти не так, основываясь на предоставленной информации, но вы можете попытаться получить трассировку стека (используя этот ответ SO ), который должен предоставить больше информации о том, что приводит кошибка.

Единственное известное мне разделение - это код сериализации, который использует код tostring(1/0) для генерации платформо-независимых значений NaN.Приведет ли это к ошибке «деление с плавающей точкой на ноль» в вашей конфигурации Lua?

(Обновление, чтобы включить решение, упомянутое в комментариях) Проблема была связана с настройками компилятора BCC о том, как обрабатывать исключения FPU.Одним из способов является манипулирование элементом управления FP: _clear87(); _control87(MCW_EM, MCW_EM); или установка арифметической маски исключения: SetExceptionMask(exAllArithmeticExceptions);.

...