2013-02-10 6 views
6

In Lua ich eine Funktion utils.debug() und was ich möchte, ist, verwenden Sie es in meinem Lua-Code aufgerufen haben, wie folgt:Lua & C++ API bekommen die Ausführung von Informationen

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 

Ich mag würde es überall verwenden mein Lua-Code, um mir beim Debuggen zu helfen. Als Ergebnis möchte ich meinen C++ Code wissen, wo im Lua-Code der utils.debug() aufgerufen wurde. Ich sah in lua_Debug und lua_getinfo und sie scheinen ziemlich nahe, was ich will, aber ich bin fehlt ein Stück:

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 
} 

Ist das, was die lua_Debug Struktur für oder gibt es eine andere Einrichtung oder Methode, die ich verwenden sollte mach das?

+1

fyi lua hat eine Support-Mailingliste, die Sie auch ausprobieren können, wenn Sie hier keine Antwort von satistfactory erhalten. –

+1

Ich bin nicht klar auf genau das, was Sie fragen. Fragen Sie, wie man 'lua_getinfo' benutzt? Weil das Handbuch [ziemlich gute Dokumentation darüber, was es tut] (http://www.lua.org/manual/5.1/manual.html#lua_getinfo). –

Antwort

8

Dies ist, was ich verwende einen Lua-Stack-Trace zu erzeugen:

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; 
} 

Siehe documentation for lua_getinfo für weitere Informationen.