Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Lua Debugger that can Attach to Process

Tags:

lua

My company has a program that uses Lua embedded in its runtime, loading up .lua files from disk and executing functions defined in them repeatedly.

Is there a way to attach to the running process and set breakpoints in my .lua files? (I'd accept either gdb-style command-line debugging as part of the Lua distribution, or perhaps a third-party IDE that provides Visual-Studio-like GUI breakpoints.)

Or is what I'm asking for entirely nonsensical and impossible given the nature of the runtime loading up random files from disk?

Edit: Looks like it's not nonsensical, given that Lua's own debug.getinfo() function can determine the source file for a given function, and debug.sethook() allows a callback for each new line of code entered. So, it's reasonable to load source code from disk and be able to tell when the interpreter is executing a particular line of code from that file. The question remains: how do I latch onto an existing process that has a Lua interpreter and inject my own trace function (which can then watch for file/line number pairs and pause execution)?

like image 364
Phrogz Avatar asked Dec 07 '11 16:12

Phrogz


4 Answers

I've been using Decoda editor for that. It allows you to attach to a running C++ application, after that it detects that you're running a Lua Interpreter within your C++ code and show your Lua source code, where you can add beakpoints and inspect variables as usual.

like image 160
Paulo Henrique Silva Avatar answered Nov 10 '22 08:11

Paulo Henrique Silva


If you can modify the .lua files, you can insert the following call just before anything you need to debug:

require 'remdebug.engine'.start()

It starts the RemDebug Lua debugger engine and tries to connect to a controller. If it cannot connect, it will just continue running as normal. I did some fixes to the debugger engine, such as dealing with temporary variables, and my student is working on a debugger GUI (due next year).

In the meantime, you can try if Lua Development Tools works for you. It features a debugger similar to RemDebug, which should be possible to set up as follows:

require("debugger")(host, port, idekey)

Alternatively, you can use SciTE-debug, which is an extension to the SciTE editor, and can serve as a controller to RemDebug. Just make sure you insert the call to remdebug.engine.start somewhere in your Lua code and insert this into the SciTE output window:

:debug.target=remote.lua

When you start your program, SciTE should show the source and current line.

like image 30
Michal Kottman Avatar answered Nov 10 '22 08:11

Michal Kottman


This is an alternative I use after much searching. If you have an external executable that loads lua, I got this working in a few minutes. The op is very responsive, it has an interactive debugger which loads your code you can place debug points interactively. It doesn't have an editor, but I use scite or crimson editor and start the executable, one line in your main lua module enables the debugger.

http://www.cushy-code.com/grld/ - this link seems dead now

I've moved to eclipse.org/ldt it has an ide and integrated debugger, recommended

hth

like image 4
daven11 Avatar answered Nov 10 '22 08:11

daven11


The Lua plugin for IntelliJ has a working debugger with no special setup required other than pointing to your Lua interpreter.

Here's a screencast of it:

http://www.screencast.com/t/CBWIkoZPg

like image 3
sylvanaar Avatar answered Nov 10 '22 07:11

sylvanaar