Skip to content

rohanrhu/gdb-frontend

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

GDBFrontend

GitHub release GitHub issues GitHub forks GitHub stars GDBFrontend Discord Support me on Patreon

GDBFrontend is an easy, flexible and extensionable gui debugger.

gdb-frontend

Installing

Requirements

  • GDB => 8.2 (with python3)
  • python3 => 3.6
  • tmux

PIP Package (Python Wheel) [Recommended]

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

Running From GIT

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

Arch Linux (AUR)

You can install Arch Linux package for Arch-based distributions. (AUR Package)

yay -S gdb-frontend-bin

and you can run it:

gdbfrontend

Flatpak

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.

Features

Expression Evaluator

GDBFrontend has an expression evaluator that you can use multiple in sametime.

Pointer Visualisation

Linked-List Visualization

Conditional Breakpoints

Right click to a breakpoint for setting its condition.

Connected Expressions

Expressions of all variables, members and items are connected in GDBFrontend's VariablesExplorer.

Process Manager

You can watch, filter or manage processes with Process Manager.

Array-Graph Visualization

Enhanced Collabration

GDBFrontend has a set of some features for collabration named as "Enhanced Collabration".

Collabration Draw

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.

Synced Source Viewing

With Enhanced Collabration all debugger clients are synchronized on source viewing.

Expression hover popup variable explorer

Extensibility

GDBFrontend is very extensible and has powerful APIs. Some examples of GDBFrontend's extensibility.

./gdbfrontend

$ 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.

Options

--help, -h

Shows help text.

--version, -v

Shows version.

--gdb-args="ARGS", -G "ARGS"

Specifies GDB command line arguments. (Optional)

--gdb-executable=PATH, -g PATH

You can specify GDB executable path like gdbfrontend --gdb-executable=/path/to/gdb. (Optional)

--tmux-executable=PATH, -tmux PATH

You can specify Tmux executable path like gdbfrontend --tmux-executable=/path/to/tmux. (Optional)

--terminal-id=PATH, -t PATH

You can specify Tmux terminal id like gdbfrontend --terminal-id=terminal-name. (Default: 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.

GDB Commands

GDBFrontend's GDB commands starts with gf-.

gf-refresh

Refreshes all browser clients.

gf-theme [theme-name]

Switch to desired theme. For example: gf-theme light, gf-theme red or gf-theme default for default theme.

gf-list-plugins

Lists all GDBFrontend plugins in the plugin directory.

gf-load-plugin [plugin-name]

Loads GDBFrontend plugin.

gf-unload-plugin [plugin-name]

Unloads GDBFrontend plugin.

Shortcuts / Hotkeys

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

Themes

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.

GDBFrontend Python API

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']

Security with Sharing Sessions

You can use --credentials=USER:PASS option for adding HTTP authentication to your debugger session.

Browser Compatibility

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.

Troubleshooting

Blocking GDB shell/main-thread

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.

Zombie Processes

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

Expression Evaluator Performance Tips

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.

Evaluator Pointer Visualization Buttons

GDB-Related Issues and Tips

  • 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.

Windows

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.

Issues about Windows-GDB

  • 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.

WSL

You can use gdb-frontend on WSL (Windows Subsystem for Linux).

Issues about WSL

  • 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.)

Versioning

Since v0.2.0-beta, GDBFrontend switched to a new versioning strategy.

Reading Versions

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

Documentation is TODO yet.

API Documentation

API Documentation is TODO yet.

Plugin Development

You can read the Plugin Development Tutorial.

Theme Development

Themes are developed as plugins.

Discord

Join to Discord community.

GDBFrontend Discord

🎊 Contributing

You can contribute with commiting to project or developing a plugin. All commits are welcome.

❤️ Donate

Cryptocurrency Donations

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. 🥳

License

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.