If I understand this correctly, Lua by default will call the debug library "debug.traceback" when an error occurs.
However, when embedding Lua into C code like done in the example here: Simple Lua API Example
We only have available the error message on the top of the stack.
i.e.
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);
}
How do I print the stack trace from C after the initial error?
mxcl's code has some problem:
I met the some question as you do,and I found this way work:
Since
luaL_traceback
is exactlydebug.traceback()
using to print the stack,so I think this may be a proper way,and you can read the API manual aboutluaL_traceback
or just read the source code of Lua to figure out the what the params means.Working off Nicol’s answer above here is a working example:
No, it won't. The Lua runtime (lua.exe) will do that, but the Lua library will not do that on its own. If you want a call-stack with your Lua errors, then you need to generate one.
The Lua runtime does this by using
lua_pcall
's error function. The stack has not been unwound when the error function is called, so you can get a stack trace there. The error function the runtime uses is this one: