| FazBrowse GitHub Viewer | Trending | | Home |
| Tools: [Download Repo ZIP] [Original HTTPS Page] |
| Name | Name | Last commit date | ||
|---|---|---|---|---|
A simple, embedabble debugger for Lua 5.x, and LuaJIT 2.x.
debugger.lua is a simple, single file, pure Lua debugger that is easy to integrate with any project. The lua-users wiki lists a number of debuggers. clidebugger was closest to what I was looking for, but I ran into several compatibility issues, and the rest are pretty big libraries with a whole lot of dependencies. I just wanted something simple to integrate that would work through stdin/stdout. I also decided that it sounded fun to try and make my own!
You can find the new project page on Codeberg.
At least for now, I will be supporting the project on both sites, but eventually I plan to eventually drop GitHub entirely.
To migrate an existing checkout, you can use the following command, or make a new checkout of the project from the new location.
git remote set-url origin https://codeberg.org/slembcke/debugger.lua git fetch origin master git reset origin/master
You may additionally need to run git checkout . to cleanup the deleted files. This will also discard your local changes if you have made any.
To read more about why this project moved, you can read about it in PROJECT_HAS_MOVED.md.
debugger.lua can be easily integrated into an embedded project with just a .h file. First though, you'll need to run lua make_c_header.lua. This generates debugger_lua.h by inserting the lua code into a template .h file.
// You need to define this in one of your C files. (and only one!)
#define DEBUGGER_LUA_IMPLEMENTATION
#include "debugger_lua.h"
int main(int argc, char **argv){
// Do normal Lua init stuff.
lua_State *lua = luaL_newstate();
luaL_openlibs(lua);
// Load up the debugger module as "debugger".
// Also stores it in a global variable "dbg".
// Use dbg_setup() to change these or use custom I/O.
dbg_setup_default(lua);
// Load some buggy Lua code.
luaL_loadstring(lua,
"local num = 1 \n"
"local str = 'one' \n"
"local res = num + str \n"
);
// Run it in the debugger. This function works just like lua_pcall() otherwise.
// Note that setting your own custom message handler disables the debugger.
if(dbg_pcall(lua, 0, 0, 0)){
fprintf(stderr, "Lua Error: %s\n", lua_tostring(lua, -1));
}
}Now in your Lua code you can access dbg or use require 'debugger'.
If you have used other CLI debuggers, debugger.lua shouldn't be surprising. I didn't make a fancy parser, so the commands are just single letters. Since the debugger is pretty simple there are only a small handful of commands anwyay.
[return] - re-run last command c(ontinue) - contiue execution s(tep) - step forward by one line (into functions) n(ext) - step forward by one line (skipping over functions) p(rint) [expression] - execute the expression and print the result f(inish) - step forward until exiting the current function u(p) - move up the stack by one frame d(own) - move down the stack by one frame w(here) [line count] - print source code around the current line t(race) - print the stack trace l(ocals) - print the function arguments, locals and upvalues. h(elp) - print this message q(uit) - halt execution
If you've never used a command line debugger before, start a nice warm cozy fire, run tutorial.lua, and open it up in your favorite editor so you can follow along.
There are several overloadable functions you can use to customize debugger.lua.
Using these you can customize the debugger to work in your environment. For instance, you can divert the I/O over a network socket or to a GUI window.
There are also some goodies you can use to make debugging easier.
Want to disable ANSI color support or disable GNU readline? Set the DBG_NOCOLOR and/or DBG_NOREADLINE environment variables.
Copyright (c) 2026 Scott Lembcke and Howling Moon Software Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
| Back | FazBrowse Home | New Git URL |