【问题标题】:Calling lua_getstack from Xcode debugger从 Xcode 调试器调用 lua_getstack
【发布时间】:2012-11-19 09:56:51
【问题描述】:

我正在尝试调试使用 Lua 5.1 的 C/C++ 应用程序。在这个阶段,有一种方法可以在调试时将数据的人类可读表示转储到 Lua 堆栈上,这将非常有用。我发现函数lua_getstack 看起来是正确的,但我找不到通过LLDB 命令行调用它并将其打印为人类可读的东西的方法。有更好的方法吗?

【问题讨论】:

    标签: c++ xcode lua lldb


    【解决方案1】:

    你可以使用这样的东西,然后从调试器中调用它:

    void lua_stackdump(lua_State *L) 
    {
      int i;
      int top = lua_gettop(L);
      for (i = 1; i <= top; i++) { /* repeat for each level */
        int t = lua_type(L, i);
        switch (t) {
          case LUA_TSTRING: { /* strings */
             printf("’%s’\n", lua_tostring(L, i));
             break;
          }
          case LUA_TBOOLEAN: { /* booleans */
             printf(lua_toboolean(L, i) ? "true" : "false");
             break;
          }
          case LUA_TNUMBER: { /* numbers */
             printf("%g\n", lua_tonumber(L, i));
             break;
          }
          default: { /* other values */
             printf("%s\n", lua_typename(L, t));
             break;
          }
        }
      }
      printf("\n"); /* end the listing */
    }
    

    【讨论】:

    • 或者,如果您需要有关堆栈的更多信息,您可以使用并扩展我的lua stack walker,这与此堆栈转储相同,但也沿堆栈上的表向下移动。相同的 Debug 将只是 void trystack(lua_State* L) { LuaStack S; CrawlStack(L,S); PrintStack(S); },以防它真的可以在调试器中运行
    猜你喜欢
    • 2010-12-27
    • 2019-03-05
    • 1970-01-01
    • 2010-12-15
    • 1970-01-01
    • 1970-01-01
    • 2011-11-19
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多