[JW Lua] Stack traceback

Thomas Weber thomas.weber at notengrafik.com
Wed Mar 30 04:55:00 CEST 2016


Standalone Lua usually provides a detailed stack traceback on errors, e.g. for a script like this:


    local function a(t)
      t[1][1] = 1
    end

    local function b(t)
      a(t)
    end

    local function c(t)
      b(t)
    end

    c{}


the following error is reported:


    lua: test.lua:2: attempt to index field '?' (a nil value)
    stack traceback:
        test.lua:2: in function 'a'
        test.lua:6: in function 'b'
        test.lua:10: in function 'c'
        test.lua:13: in main chunk
        [C]: in ?


However, JWLua only reports:


    E:\tmp\.\test.lua:2: attempt to index field '?' (a nil value)


However, the full stack traceback can be displayed with the help of xpcall() and an appropriate message handler:


    local function a(t)
      t[1][1] = 1
    end

    local function b(t)
      a(t)
    end

    local function c(t)
      b(t)
    end

    local function msgh(message)
      print(debug.traceback(message, 2))
    end

    xpcall(c, msgh, {})


Now, JWLua's output pane displays (with mangled line breaks, however):


    Running [test.lua] ======>
    E:\tmp\.\test.lua:2: attempt to index field '?' (a nil value)
    stack traceback:
        E:\tmp\.\test.lua:2: in function 'a'
        E:\tmp\.\test.lua:6: in function 'b'
        E:\tmp\.\test.lua:10: in function <E:\tmp\.\test.lua:9>
        [C]: in function 'xpcall'
        E:\tmp\.\test.lua:17: in main chunk
    <======= [test.lua] succeeded (Processing time: 0.001 s).


Ideally, the stack traceback info would be provided by default without the need to wrap each script into a function and executing it using xpcall() and a message handler.  Presumably, this would be possible on the C/C++ side by a combination of lua_load() and lua_pcall().




More information about the JWLua mailing list