2013-09-08 11 views

Odpowiedz

5

Powinieneś być w stanie debugować swoją aplikację za pomocą ZeroBrane Studio, postępując zgodnie z instructions for Lua 5.2 debugging. Pamiętaj, że musisz mieć luasocket skompilowany przeciwko Lua5.2. (Następuje awaria, ponieważ aplikacja ładuje luasocket skompilowany z Lua5.1, który z kolei ładuje bibliotekę DLL Lua5.1 lub nie znajduje wymaganych symboli.)

Jeśli nie chcesz skompilować luasocket, możesz uzyskać pliki binarne dla systemu Windows/OSX/Linux od this folder and its subfolders; po prostu upewnij się, że te biblioteki są w LUA_CPATH przed wszystkimi folderami, które mogą mieć luasocket skompilowanymi na Lua5.1.

[Zaktualizowany na podstawie dyskusji na czacie] Przyczyną pojawiania się wielu problemów dotyczących maszyny wirtualnej jest prawdopodobnie statyczna kompilacja interpretera Lua. Następnie ładujesz luasocket (bezpośrednio lub przez mobdebug), który jest kompilowany przeciwko lua52.dll, który ładuje inną kopię tłumacza. Aby tego uniknąć, masz dwie możliwości: (1) skompiluj luasocket do swojej aplikacji w taki sam sposób, w jaki sam umieścisz interpreter lua; nie będziesz potrzebować niczego poza wyjątkiem jednego pliku mobdebug.lua do debugowania aplikacji lub (2) używania proxy dll; będzie wyglądać jak lua52.dll, ale faktycznie będzie pośredniczyć w twoich telefonach do twojej statycznie skompilowanej biblioteki lua, unikając problemów z wieloma maszynami wirtualnymi. proxy dll jest dla Lua 5.1, ale możesz zmodyfikować skrypt, aby działał w Lua 5.2.

(Jeśli tłumacz nie jest statycznie skompilowany, można jeszcze dostać dwóch tłumaczy jeśli Lua DLL załadować nazywa się inaczej niż lua52.dll.)

+0

To nie zadziałało. Mój program ulega awarii, gdy tylko zadzwonię do lua_call. To właśnie zrobiłem, umieściłem ten kod w moim pliku .lua 'package.path = package.path .." C:/ZeroBraneStudio/lualibs/mobdebug/mobdebug.lua " package.cpath = package.cpath .. "C:/ZeroBraneStudio/bin/clibs52/socket /? Dll" require ('mobdebug'). Start() 'i pojawia się błąd' PANIC: niezabezpieczony błąd w wywołaniu Lua API (main.lua: 3 : próba indeksowania globalnego "pakietu" (wartość zerowa)) ' – Caesar

+0

' próba indeksowania globalnego 'pakietu' (wartość zerowa) ': tak, co stało się z' pakietem 'globalnym w twoim środowisku? –

+0

Możesz również dodać '... clibs52/mime/?. dll', ponieważ może być załadowany z' socket.lua' i chcesz się upewnić, że został załadowany z 'clibs52'. Bardziej wygodne może być przełączenie dyskusji na temat rozwiązywania problemów na [listę mailową ZeroBrane Studio] (http://studio.zerobrane.com/community.html). –

3

W odpowiedzi na PO komentuje żądania, oto jak należy otworzyć lua standardowa biblioteka "baza" z 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); 
} 

pamiętać, że można otworzyć wszystkie standardowe biblioteki naraz zastępując:

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

z

luaL_openlibs(L); 

Więcej informacji na ten temat zawiera Lua 5.2 reference manual Section 6.

+0

Dzięki, że wydawało się, że to robota dla tego błędu, ale wydaje mi się, że mam kolejny błąd. 'PANIC: niezabezpieczony błąd w wywołaniu interfejsu Lua API (błąd ładowania modułu 'socket.core' z pliku" C:/ZeroBraneStudio/bin/clibs52/socket \ core.dll ": Nie można znaleźć określonego modułu ) 'Zajrzałem do tej lokalizacji i mogę powiedzieć, że jest tam przez kopiowanie i wklejanie. – Caesar

+0

Czy próbujesz debugować rzeczywistą aplikację C/C++, która osadza lua? – greatwolf

+0

Zrobiłem pokój, żebyśmy mogli to przedyskutować, byłoby o wiele czystsze niż tutaj. proszę dołącz do mnie http://chat.stackoverflow.com/rooms/37030/debugging-embedded-lua-5-2-2-code – Caesar