GDBFrontend is an easy, flexible and extensionable gui debugger.
You can install GDBFrontend via deb package for Debian-based distributions.
You can install it from following commands:
echo "deb [trusted=yes] https://oguzhaneroglu.com/deb/ ./" | sudo tee -a /etc/apt/sources.list > /dev/null
sudo apt update
sudo apt install gdbfrontend
After installing with APT, you will get updates for new releases on APT upgrade.
You can get upgrades with following commands:
sudo apt update
sudo apt upgrade gdbfrontend
and you can run it:
gdbfrontend
You can download latest source and run it.
- GDB => 8.2 (with python3)
- python3
- tmux
You can run gdb-frontend with following commands:
git clone https://github.com/rohanrhu/gdb-frontend.git gdb-frontend
cd gdb-frontend
./gdbfrontend
and you can open it with:
http://127.0.0.1:5551/terminal/
or without terminal:
http://127.0.0.1:5551/
You can open GDB shell with the command:
tmux a -t gdb-frontend
Flatpak package is a TODO.
$ gdbfrontend --help
GDBFrontend is a easy, flexible and extensionable gui debugger.
Options:
--help, -h: Shows this help message.
--version, -v: Shows version.
--gdb-executable=PATH, -g PATH: Specifies GDB executable path (Default is "gdb" command on PATH environment variable.)
--tmux-executable=PATH, -tmux PATH: Specifies Tmux executable path (Default is "tmux" command on PATH environment variable.)
--terminal-id=NAME, -t NAME: Specifies tmux terminal identifier name (Default is "gdb-frontend".)
--host=IP, -H IP: Specifies current host address that you can access via for HTTP and WS servers.
--listen=IP, -l IP: Specifies listen address for HTTP and WS servers.
--port=PORT, -p PORT: Specifies port range for three ports to (Gotty: PORT, HTTP: PORT+1, WS: PORT+2 or 0 for random ports).
--http-port=PORT: Specifies HTTP server port.
--server-port=PORT: Specifies WS server port.
--gotty-port=PORT: Specifies Gotty server port.
--readonly, -r: Makes code editor readonly. (Notice: This option is not related to security.)
--workdir, -w: Specifies working directory.
--plugin-dir, -P: Specifies plugins directory.
--verbose, -V: Enables verbose output.
Shows help text.
Shows version.
You can specify GDB executable path like gdbfrontend --gdb-executable=/path/to/gdb
. (Optional)
You can specify Tmux executable path like gdbfrontend --tmux-executable=/path/to/tmux
. (Optional)
You can specify Tmux terminal id like gdbfrontend --terminal-id=terminal-name
. (Default: gdb-frontend
)
Specifies current host address that you can access via for HTTP and WS servers.
Specifies listen address for HTTP and WS servers.
Specifies port range for three ports to (Gotty: PORT, HTTP: PORT+1, WS: PORT+2 or 0 for random ports).
Specifies HTTP server port.
Specifies WS server port.
Specifies Gotty server port.
Makes code editor readonly. (Notice: This option is not related to security.)
Specifies working directory.
Specifies plugins directory.
Enables verbose output.
GDBFrontend's GDB commands starts with gf-
.
Refreshes all browser clients.
Switch to desired theme. For example: gf-theme light
or gf-theme default
for default theme.
Lists all GDBFrontend plugins in the plugin directory.
Loads GDBFrontend plugin.
Unloads GDBFrontend plugin.
You can access GDBFrontend's Python API via gdbfrontend
module.
(gdb) python-interactive
>>> dir(gdbfrontend)
For example, you can get all client sockets like this:
>>> gdbfrontend.api.globalvars.dbgServer.server.connections
{1: <server.GDBFrontendSocket object at 0x...>}
or you can get all plugins:
>>> gdbfrontend.plugin.getAll()
['hello', 'theme_light']
Most of GDBFrontend functions are thread-safe and work on GDB's main-thread. So, if you run something that is blocking on the GDB shell, GDBFrontend functions have to wait it until finish.
You will get this warning when a thread-safe GDBFrontend function needs to work and you are blocking GDB's main thread.
(gdb) shell
$ ...
[GDBFrontend] GDB main thread is bloocking. (If you are running something (like shell) in GDB shell, you must temrinate it for GDBFrontend to continue work properly.)
When you exit shell, blocking GDBFrontend functions will continue working.
Sometimes GDB and gdb-frontend may not be closed correctly. In this case, you can terminate gdb-frontend shell.
tmux kill-session -t gdb-frontend
- GDB does not give sources of linked object until stepping a line that calls a function from the linked object once. You can add break point a line and step it once, then you will see sources from linked object hereafter during the session.
In fact, gdb-frontend is able to run on Windows but there are some serious issues in the GDB's Windows version those avoid using gdb-frontend on Windows. Of course you can use gdb-frontend on WSL if you are using Windows 10.
- GDB's main-thread is being blocked during running process. (gdb-frontend has an interrupting mechanism to fixing this but it is not enough yet.)
- Windows-GDB's prompt is being blocked during running process and there are some issues about interrupting the application.
- Current release of Windows-GDB contains Python2. New GDB 9 have Python3 but it is not released yet.
You can use gdb-frontend on WSL (Windows Subsystem for Linux).
- Random port option is not usable on WSL becasue
/proc/net/tcp
interface is not working on WSL.
Documentation is TODO yet.
API Documentation is TODO yet.
You can read the Plugin Development Tutorial.
You can contribute with commiting to project or developing a plugin. All commits are welcome.
You can donate to support the project.
GNU General Public License v3 (GPL-3)
You may copy, distribute and modify the software as long as you track changes/dates in source files. Any modifications to or software including (via compiler) GPL-licensed code must also be made available under the GPL along with build & install instructions.