GDBFrontend is an easy, flexible and extensionable gui debugger.
- GDB => 8.2 (with python3)
- python3 => 3.6
- tmux
You can install GDBFrontend with pip
.
sudo python3 -m pip install gdbfrontend
if it is already installed and you are upgrading
sudo python3 -m pip install --upgrade gdbfrontend
or if you want to install specific GIT snapshot:
sudo python3 setup.py install
and you can run
gdbfrontend
You can download latest source and run it.
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:5550/
You can open GDB shell with the command:
tmux a -t gdb-frontend
You can install Arch Linux package for Arch-based distributions. (AUR Package)
yay -S gdb-frontend-bin
and you can run it:
gdbfrontend
Flatpak package is a TODO.
Follow this tutorial to learn how to debug Dockerized C/C++ apps with GDBFrontend.
Follow this quick tutorial for debugging embedded devices with GDBFrontend.
Follow this quick tutorial for debugging native C Python extensions with GDBFrontend.
GDBFrontend has powerful and extensible APIs. Follow this quick tutorial to learn developing GDBFrontend plugins.
Follow this quick tutorial for integration ideas for special development/debugging requirements.
Follow this tutorial for debugging STM32 with OpenOCD and GDBFrontend.
GDBFrontend has an expression evaluator that you can use multiple in sametime.
Right click to a breakpoint for setting its condition.
Expressions of all variables, members and items are connected in GDBFrontend's VariablesExplorer.
You can watch, filter or manage processes with Process Manager.
GDBFrontend has a set of some features for collabration named as "Enhanced Collabration".
Collabration draw is available when you enable Enhanced Collabration. Click to Draw or use Ctrl + Shift + X shortcut to draw and Ctrl + Shift + C to clear all drawings.
With Enhanced Collabration all debugger clients are synchronized on source viewing.
GDBFrontend is very extensible and has powerful APIs. Some examples of GDBFrontend's extensibility.
$ gdbfrontend --help
GDBFrontend is a easy, flexible and extensionable gui debugger.
Options:
--help, -h: Shows this help message.
--version, -v: Shows version.
--gdb-args="ARGS", -G "ARGS": Specifies GDB command line arguments. (Optional)
--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".)
--credentials=USER:PASS, -c USER:PASS: Specifies username and password for accessing to debugger.
--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 HTTP port. (0 for random port.)
--url-base=PATH, -u PATH: Specifies URL base path. (Default: /)
--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.
--dontopenuionstartup, -D: Avoids opening UI just after startup.
--verbose, -V: Enables verbose output.
Shows help text.
Shows version.
Specifies GDB command line arguments. (Optional)
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 username and password for accessing to debugger.
Specifies current host address that you can access via for HTTP and WS servers.
Specifies listen address for HTTP and WS servers.
Specifies HTTP port. (0 for random port.)
Specifies URL base path. (Default: /)
Makes code editor readonly. (Notice: This option is not related to security.)
Specifies working directory.
Specifies plugins directory.
Avoids opening UI just after startup.
Enables verbose output.
GDBFrontend's GDB commands starts with gf-
.
Refreshes all browser clients.
Switch to desired theme. For example: gf-theme light
, gf-theme red
or gf-theme default
for default theme.
Lists all GDBFrontend plugins in the plugin directory.
Loads GDBFrontend plugin.
Unloads GDBFrontend plugin.
Current hotkeys are listed below.
Action | Hotkey | Context |
---|---|---|
General: Open a source file | Ctrl + O | GDBFrontend |
General: New ExpressionEvaluator | Ctrl + R | GDBFrontend |
General: New ExpressionEvaluator on native window | Ctrl + Shift + R | GDBFrontend |
General: Fuzzy source finder | Ctrl + P | GDBFrontend |
Runtime: Run | F5 | GDBFrontend |
Runtime: Continue | F6 | GDBFrontend |
Runtime: Pause/Interrupt | F7 | GDBFrontend |
Runtime: Step Over | F8 | GDBFrontend |
Runtime: Step Into | F9 | GDBFrontend |
Runtime: Step Instruction | F10 | GDBFrontend |
Runtime: Stop | F11 | GDBFrontend |
Enhanced Collabration: Toggle drawing mode | Ctrl + Shift + X | GDBFrontend / Enhanced Collabration: Enabled |
Enhanced Collabration: Clear all drawings | Ctrl + Shift + C | GDBFrontend / Enhanced Collabration: Enabled |
GDBFrontend has built-in themes.
For switching between themes use gf-theme [THEME]
command on GDB shell.
(gdb) gf-theme doki
(gdb) gf-theme sky
(gdb) gf-theme sakura
(gdb) gf-theme waifu
(gdb) gf-theme cyberpunk
(gdb) gf-theme dark
(gdb) gf-theme green
(gdb) gf-theme light
(gdb) gf-theme red
For switching back to the default theme.
(gdb) gf-theme
Also you may want to look to Plugin Development Tutorial.
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.httpServer.ws_clients
{1: <server.GDBFrontendSocket object at 0x...>}
or you can get all plugins:
>>> gdbfrontend.plugin.getAll()
['hello', 'theme_cyberpunk', 'theme_dark', 'theme_doki', 'theme_green', 'theme_light', 'theme_red', 'theme_sakura', 'theme_sky', 'theme_waifu']
You can use --credentials=USER:PASS
option for adding HTTP authentication to your debugger session.
GDBFrontend is mainly developing with testing on Chromium-based browsers. It will work properly with other browsers especially with Firefox but if you face some problems on other browsers, you can send a bug-report.
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
$ ...
When you exit shell, blocking GDBFrontend functions will continue working.
Note: Sometimes you may get this warning without running anything in GDB shell, it means something (in GDB's event-loop) is taking a long time; in this case just ignore this warning.
GDBFrontend sends SIGTERM to its sub-processes, your application and its sub-processes. If your application is forking new processes and setting their PGIDs, GDBFrontend may not close them. In this case you should send SIGKILL to your processes.
pkill -f gdb
If you are using ExpressionEvaluator with very long depth expanded variables/members, your scroll and evaluator window move performance may be affected bad for pointer visualization. In this situation, you can turn off signal and slot pointings for that evaluator window.
- GDB may not give sources of dynamic linked object until stepping a line that calls a function from the dynamic linked object once. You can add break point a line and step it once, then you will see sources from dynamic 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.
You can use gdb-frontend on WSL (Windows Subsystem for Linux).
- On WSL 1, Random port option is not usable on WSL becasue
/proc/net/tcp
interface is not working on WSL. (WSL 2 does not has this problem.)
Since v0.2.0-beta, GDBFrontend switched to a new versioning strategy.
In vX.Y.Z-STABILITY
:
X
ismajor versions, changes long term with major features and enhancements.Y
ismain versions that include new features and enhancements.Z
isbugfix releases of main versions.STABILITY
is stability level of the release. (alpha
,beta
,rcN
,stable
)
Documentation is TODO yet.
API Documentation is TODO yet.
You can read the Plugin Development Tutorial.
Themes are developed as plugins.
Join to Discord community.
You can contribute with commiting to project or developing a plugin. All commits are welcome.
Currency | Address |
---|---|
BTC | bc1qhvlc762kwuzeawedl9a8z0duhs8449nwwc35e2 |
ETH / USDT / USDC | 0x1D99B2a2D85C34d478dD8519792e82B18f861974 |
XMR | 88qvS4sfUnLZ7nehFrz3PG1pWovvEgprcUhkmVLaiL8PVAFgfHjspjKPLhWLj3DUcm92rwNQENbJ1ZbvESdukWvh3epBUty |
Preferably, donating USDT or USDC is recommended but you can donate any of the above currencies. 🥳
Copyright (C) 2019, Oğuzhan Eroğlu rohanrhu2@gmail.com (https://oguzhaneroglu.com/)
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.