[Qt-creator] Adding a new debugger or emulating a gdbserver interface in the existing home-made debugger

André Pönitz apoenitz at t-online.de
Wed Dec 4 20:43:39 CET 2019

On Wed, Dec 04, 2019 at 09:06:32AM +0000, Pierre FICHEPOIL wrote:
> I’m working on QtCreator 4.9
> and adding support for the LuaJIT  language.
> I already got a home-made Lua debugger that is split into a debugging
> server (code is ran in it’s own thread in the app you want to debug),
> and debugging clients (Each lua threads got it’s own debugging client
> to read and send messages to the server)
> The debugging server is acting like a bridge between the actual
> debugger frontend (That is supposed to be QtCreator) and the Lua
> threads I’m debugging.
> The communication is using a TCP Socket, with no auth.
> [cid:image001.png at 01D5AA8A.21B7CC80]
> Right now the server handle this kind of commands, I tested the
> following commands using the « raw » communication mode from Putty and
> using a custom client.
> BREAKPOINT_ADD "c:/file_path/file.lua" 42
> BREAKPOINT_REMOVE "c:/file_path/file.lua" 42
> SET_LOCAL 4 X 42
>    Etc…
>    Each command ends with a new line.
>    Right now the only missing part of this project is linking the
>    Debugging Frontend (QtCreator) to the debugging server.
>    Would It be easier/more elegant to implement the gdbserver
>    interface/protocol in my debugging server [1]as suggested by aha_1980
>    or to make my own plugin ?

>    If the first solution is the one to choose, do you have any tip or easy
>    to understand documentation on the gdbserver protocol/behavior ?

Both approaches are feasible, and both have pros and cons.

The gdbserver protocol is a bit of an unstructured mess where pretty much
each command has a different syntax and produces similarly messy output.

On the other hand it is also a de-facto standard, and is well-understood
by GDB itself so if your server "speaks" that protocol, your setup is
magically supported by several IDEs at once.

>    Else, is there some « clean » and « easy » way to add my debugger,
>    without recoding the UI that already exists in the existing plugin.

For adding a new debugger "backend" in Creator you do not need to do
any UI. The views are all generic.

A minimal "native Qt Creator" implementation would be very similar to
the Python debugging support which is effectively ~600 lines of
C++ in src/plugins/debugger/pdb/* and some 1700 lines of python "bridge"
code in share/qtcreator/debugger/pdbbridge.py.

In your case that's likely even less as the pdbbridge.py is kind of
special as it contains the actual debugger, too. A slim bridge is
cdbbridge.py with about 500 lines.

So all with you might get away with about 600 lines C++ plus 600 lines of
Python for a "proper" integration of your LUA debug server into Qt Creator.


More information about the Qt-creator mailing list