Отладка встроенного кода Lua 5.2.2

Как я могу отладить код Lua 5.2.2, который встроен в мое приложение C ++?

Я уже взглянул на это вопрос и все IDE, представленные в нем, имеют дело с 5.1 и ниже, и когда я пытаюсь использовать их с 5.2.2, они терпят крах.

6

Решение

Вы должны быть в состоянии отладить ваше приложение, используя ZeroBrane Studio следуя инструкция по отладке Lua 5.2. Обратите внимание, что вам нужно будет скомпилировать luasocket для Lua5.2. (Вероятно, вы видите сбой, потому что ваше приложение загружает luasocket, скомпилированный с Lua5.1, который, в свою очередь, загружает Lua5.1 DLL или не может найти необходимые символы.)

Если вы не хотите компилировать luasocket, вы можете получить бинарные файлы для Windows / OSX / Linux из эта папка и ее подпапки; просто убедитесь, что эти библиотеки находятся в LUA_CPATH перед любыми папками, которые могут иметь luasocket, скомпилированный с Lua5.1.

[Обновлено на основе обсуждения в чате] Причина, по которой вы можете столкнуться с проблемой нескольких виртуальных машин, заключается в том, что ваше приложение, вероятно, статически компилирует интерпретатор Lua. Затем вы загружаете luasocket (напрямую или через mobdebug), который скомпилирован с lua52.dll, который загружает другую копию интерпретатора. Чтобы избежать этого, у вас есть два варианта: (1) скомпилировать luasocket в ваше приложение так же, как вы включаете сам интерпретатор lua; для отладки вашего приложения вам ничего не понадобится, кроме одного файла mobdebug.lua или (2) использования proxy dll; он будет выглядеть как lua52.dll, но на самом деле будет передавать ваши вызовы в статически скомпилированную библиотеку lua, избегая проблем с несколькими виртуальными машинами. прокси dll предназначен для Lua 5.1, но вы можете настроить скрипт, чтобы он работал для Lua 5.2.

(Если ваш интерпретатор статически не скомпилирован, вы все равно можете получить два интерпретатора, если загружаемая вами библиотека Lua DLL будет отличаться от lua52.dll.)

5

Другие решения

В ответ на комментированный запрос OP вот как вы должны открыть стандартную библиотеку lua «base» из C ++:

#include "lua.hpp"
//...
int main ()
{
lua_State* L = luaL_newstate();
luaL_requiref(L, "base", luaopen_base, 0);

// ...
int error = luaL_loadfile(L, mainLua);
lua_call(L, 0, 0);

lua_close(L);
}

Обратите внимание, что вы можете открыть все стандартные библиотеки одновременно, заменив:

luaL_requiref(L, "base", luaopen_base, 0);

с

luaL_openlibs(L);

Справочное руководство по Lua 5.2 Раздел 6 имеет больше информации об этом.

3

По вопросам рекламы [email protected]