2013-02-10 15 views
6

W Lua Mam funkcja nazywa utils.debug() i co chciałbym zrobić, to używać go w moim kodu Lua następująco:Lua & C++ API coraz wykonujący informacje

function Foo:doSomething 
    if (/* something */) then 
     print("Success!") 
    else 
     utils.debug() 
    end 
end 

function Foo:doSomethingElse 
    if (/* something else */) then 
     print("Awesome!") 
    else 
     utils.debug() 
    end 
end 

chciałbym go używać przez cały mój kod Lua, aby pomóc mi w debugowaniu. W rezultacie chciałbym, aby mój kod C++ wiedział, gdzie w kodzie Lua został wywołany utils.debug(). Spojrzałem w lua_Debug i lua_getinfo i wydają się bardzo blisko tego, co chcę, ale brakuje mi kawałek:

int MyLua::debug(lua_State* L) 
{ 
    lua_Debug ar; 
    lua_getstack(L, 1, &ar); 
    lua_getinfo(L, ??????, &ar); 

    // print out relevant info from 'ar' 
    // such as in what function it was called, line number, etc 
} 

Czy to, co jest dla struct lua_Debug czy istnieje inny obiekt lub metody należy użyć do Zrób to?

+1

fyi lua ma listę dyskusyjną wsparcia, którą można również wypróbować, jeśli nie dostaniesz odpowiedzi na temat satistfactory tutaj. –

+1

Nie wiem dokładnie, o co prosisz. Czy pytasz, jak używać 'lua_getinfo'? Ponieważ instrukcja zawiera [całkiem dobrą dokumentację na temat tego, co robi] (http://www.lua.org/manual/5.1/manual.html#lua_getinfo). –

Odpowiedz

8

To co mogę użyć do wytworzenia Lua ślad stosu:

lua_Debug info; 
int level = 0; 
while (lua_getstack(l, level, &info)) { 
    lua_getinfo(l, "nSl", &info); 
    fprintf(stderr, " [%d] %s:%d -- %s [%s]\n", 
     level, info.short_src, info.currentline, 
     (info.name ? info.name : "<unknown>"), info.what); 
    ++level; 
} 

Patrz documentation for lua_getinfo aby uzyskać więcej informacji.