首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用嵌入式lua从C代码打印堆栈跟踪

使用嵌入式lua从C代码打印堆栈跟踪
EN

Stack Overflow用户
提问于 2012-09-04 11:33:44
回答 3查看 13K关注 0票数 19

如果我理解正确的话,默认情况下,当出现错误时,Lua会调用调试库"debug.traceback“。

但是,在将Lua嵌入到C代码中时,如下面的示例所示:Simple Lua API Example

我们只在堆栈顶部提供了错误消息。

代码语言:javascript
复制
if (status) {
    /* If something went wrong, error message is at the top of */
    /* the stack */
    fprintf(stderr, "Couldn't load file: %s\n", lua_tostring(L, -1));

    /* I want to print a stacktrace here. How do I do that? */
    exit(1);
}

如何在初始错误后从C打印堆栈跟踪?

EN

回答 3

Stack Overflow用户

发布于 2013-05-02 01:41:06

根据Nicol上面的答案工作是一个有效的例子:

代码语言:javascript
复制
static int traceback(lua_State *L) {
    lua_getfield(L, LUA_GLOBALSINDEX, "debug");
    lua_getfield(L, -1, "traceback");
    lua_pushvalue(L, 1);
    lua_pushinteger(L, 2);
    lua_call(L, 2, 1);
    fprintf(stderr, "%s\n", lua_tostring(L, -1));
    return 1;
}

int main(int argc, char **argv) {
    lua_State *L = lua_open();
    luaL_openlibs(L);    
    lua_pushcfunction(L, traceback);
    int rv = luaL_loadfile(L, "src/main.lua");
    if (rv) {
        fprintf(stderr, "%s\n", lua_tostring(L, -1));
        return rv;
    } else {
        return lua_pcall(L, 0, 0, lua_gettop(L) - 1);
    }
}
票数 10
EN

Stack Overflow用户

发布于 2015-09-16 17:10:42

我遇到了和你一样的问题,我发现这样做是可行的:

代码语言:javascript
复制
luaL_traceback(L, L, NULL, 1);
printf("%s\n", lua_tostring(L, -1));

因为luaL_traceback是用来打印堆栈的debug.traceback(),所以我认为这可能是一种合适的方式,你可以阅读luaL_traceback的API手册或只是阅读Lua的源代码来弄清楚参数的含义。

票数 6
EN

Stack Overflow用户

发布于 2014-04-14 02:48:30

mxcl的代码有一些问题:

代码语言:javascript
复制
static int traceback(lua_State *L) {
    lua_getfield(L, LUA_GLOBALSINDEX, "debug");
    lua_getfield(L, -1, "traceback");
    //---------------------------
    lua_pop(L,-2); //to popup the 'debug'
    //---------------------------
    lua_pushvalue(L, 1);
    lua_pushinteger(L, 2);
    lua_call(L, 2, 1);
    fprintf(stderr, "%s\n", lua_tostring(L, -1));
    return 1;
}
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12256455

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档