MCPcopy
hub / github.com/rohanrhu/gdb-frontend

github.com/rohanrhu/gdb-frontend @main sqlite

repository ↗ · DeepWiki ↗
5,175 symbols 19,122 edges 683 files 535 documented · 10%
README

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.

Debugging Dockerized C/C++ apps with GDBFrontend

Follow this tutorial to learn how to debug Dockerized C/C++ apps with GDBFrontend.

Embedded Debugging with GDBFrontend

Follow this quick tutorial for debugging embedded devices with GDBFrontend.

Python C Extension Debugging with GDBFrontend

Follow this quick tutorial for debugging native C Python extensions with GDBFrontend.

How to develop GDBFrontend plugins?

GDBFrontend has powerful and extensible APIs. Follow this quick tutorial to learn developing GDBFrontend plugins.

How to integrate GDBFrontend with your Makefile?

Follow this quick tutorial for integration ideas for special development/debugging requirements.

STM32 Debugging using OpenOCD, GDB & GDBFrontend on Linux

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 i

Extension points exported contracts — how you extend this code

IRenderDebouncer (Interface)
(no doc) [6 implementers]
frontend/thirdparty/xterm/src/browser/Types.d.ts
IDisposable (Interface)
(no doc) [29 implementers]
frontend/thirdparty/xterm/src/common/Types.d.ts
IDisposable (Interface)
(no doc) [29 implementers]
frontend/thirdparty/xterm/typings/xterm.d.ts
IDcsHandler (Interface)
(no doc) [5 implementers]
frontend/thirdparty/xterm/src/common/parser/Types.d.ts
ICellData (Interface)
(no doc) [4 implementers]
frontend/thirdparty/xterm/src/common/Types.d.ts

Core symbols most depended-on inside this repo

e
called by 3855
frontend/thirdparty/ace/ace.js
getLine
called by 1608
frontend/thirdparty/xterm/typings/xterm.d.ts
push
called by 1406
frontend/thirdparty/xterm/src/common/Types.d.ts
Il
called by 1101
frontend/thirdparty/ace/worker-xquery.js
kl
called by 1093
frontend/thirdparty/ace/worker-xquery.js
Pl
called by 995
frontend/thirdparty/ace/worker-xquery.js
Sl
called by 974
frontend/thirdparty/ace/worker-xquery.js
Hl
called by 913
frontend/thirdparty/ace/worker-xquery.js

Shape

Function 3,187
Method 1,595
Class 207
Interface 159
Enum 27

Languages

TypeScript93%
Python7%

Modules by API surface

frontend/thirdparty/ace/worker-xquery.js587 symbols
docs/assets/javascripts/bundle.960e086b.min.js298 symbols
frontend/thirdparty/xterm/src/common/Types.d.ts178 symbols
frontend/thirdparty/ace/worker-javascript.js160 symbols
frontend/thirdparty/ace/keybinding-vim.js142 symbols
docs/assets/javascripts/lunr/wordcut.js139 symbols
frontend/thirdparty/xterm/src/common/InputHandler.ts118 symbols
frontend/thirdparty/xterm/src/browser/Types.d.ts97 symbols
frontend/thirdparty/jquery-3.5.1.min.js83 symbols
frontend/thirdparty/ace/worker-lua.js79 symbols
frontend/thirdparty/ace/worker-html.js75 symbols
frontend/thirdparty/xterm/typings/xterm.d.ts71 symbols

Dependencies from manifests, versioned

@types/chai4.2.22 · 1×
@types/debug4.1.7 · 1×
@types/deep-equal1.0.1 · 1×
@types/glob7.2.0 · 1×
@types/jsdom16.2.13 · 1×
@types/mocha9.0.0 · 1×
@types/node14.14.44 · 1×
@types/utf83.0.0 · 1×
@types/webpack5.28.0 · 1×
@types/ws8.2.0 · 1×
@typescript-eslint/eslint-plugin5.3.0 · 1×
@typescript-eslint/parser5.3.0 · 1×

For agents

$ claude mcp add gdb-frontend \
  -- python -m otcore.mcp_server <graph>

⬇ download graph artifact