A multi-language debugger frontend for the Linux terminal
- Fast
- Easy to configure
- Key bindings documented on-screen
- Switch between custom layouts while debugging
- Scrollable window data
- Breakpoint, watchpoint persistence
- Debugger prompt access
| Debugger | Languages |
|---|---|
| GDB | C, C++, D, Go, Objective-C, Fortran, OpenCL C, Pascal, Rust, assembly, Modula-2, Ada |
| PDB | Python |
sudo apt-get install make gcc libncurses-dev gdb python3
make
sudo make install
- The program can be run as follows in the same directory as a
.termfuconfiguration file. - Breakpoint and watchpoint data will be stored in
.termfu_data.
termfu-hprints usage instructions.-csets the configuration file path.-psets the data persistence file path.
termfu -c .termfu_01 -p .termfu_01_data- Switch between layouts with your
(l)ayoutskey. - Scroll window data by selecting the window via its key binding and then using the arrow, page up, etc. keys. You can also use the
hjklkeys.
[ command ]
gdb --interpreter=mi a.out
[ plugins ]
# header commands
AtP : A : (A)ttach
Con : c : (c)ontinue
Fin : f : (f)inish
Kil : k : (k)ill
Lay : l : (l)ayouts
Nxt : n : (n)ext
Prm : m : pro(m)pt
Qut : q : (q)uit
Run : r : (r)un
Stp : s : (s)tep
Unt : u : (u)ntil
# windows
Asm : a : (a)ssembly
Brk : b : (b)reakpoints
Dbg : d : (d)ebug out
LcV : v : local (v)ars
Prg : p : (p)rogram out
Reg : g : re(g)isters
Src : o : s(o)urce file
Stk : t : s(t)ack
Wat : w : (w)atch
[ layout : Main ]
>h
mlq
rnscufk
>w
bbbooooo
wwwooooo
vvvooooo
ttpppddd
[ layout : Assembly / Registers ]
>h
mlq
rnscufk
>w
oag
oag
oag
wdt
[ command ]
gdb --interpreter=mi a.out
| Debugger | Command |
|---|---|
| GDB | gdb --interpreter=mi a.out |
| PDB | python -m pdb app.py |
[ plugins ]
# <plugin code> : <key binding> : <title>
AtP : A : (A)ttach
Con : c : (c)ontinue
- Each three-character, case-sensitive plugin code corresponds to a specific header command or window.
- Add parentheses around a key binding in its
(t)itlefor easy reference. This character will have a different color than the surrounding characters.
Header Commands
| Code | Description | GDB | PDB |
|---|---|---|---|
| AtP | Attach to PID, file | ✔️ | |
| Con | Continue | ✔️ | ✔️ |
| Fin | Finish | ✔️ | ✔️ |
| Kil | Kill | ✔️ | ✔️ |
| Lay | Choose layout | ✔️ | ✔️ |
| Nxi | Next instruction | ✔️ | |
| Nxt | Next | ✔️ | ✔️ |
| Prm | Debugger prompt | ✔️ | ✔️ |
| Qut | Quit | ✔️ | ✔️ |
| Run | Run, reload program | ✔️ | ✔️ |
| Sti | Step instruction | ✔️ | |
| Stp | Step | ✔️ | ✔️ |
| Unt | Until | ✔️ | ✔️ |
Windows
| Code | Description | GDB | PDB |
|---|---|---|---|
| Asm | Assembly code | ✔️ | |
| Brk | Breakpoints | ✔️ | ✔️ |
| Dbg | Debugger output | ✔️ | ✔️ |
| LcV | Local variables | ✔️ | ✔️ |
| Prg | Program output | ✔️ | ✔️ |
| Reg | Registers | ✔️ | |
| Src | Source file | ✔️ | ✔️ |
| Stk | Stack | ✔️ | ✔️ |
| Wat | Watchpoints | ✔️ | ✔️ |
[ layout : Main ]
>h
mlqrns
cufk
>w
eeeooooo
wwwooooo
vvvooooo
TTpppddd
- The order and row of each header (
>h) key binding in the configuration determines the corresponding title's position in the header window. - Window (
>w) size ratios and positions are determinded via "key-binding ASCII art."
- Submit PRs to branch release-0.3.1.
- Bug fixes, optimizations, new debugger implementations, and plugins are welcome.
- Use existing code conventions.
- Run
make helpto print all scripts. - Run
make todoto print all source file tags, such asTODO,FIX, etc. - Run
make buildto compile all test programs. - The
logd()function insrc/utilities.hallows forprintf()-style debugging when runningncursesby outputting todebug.out. - It is recommended to create a shortcut for refreshing your terminal screen, as
ncurseswill make a mess of it when not shut down properly.
- Run
$ make debugto start the termfu debugger. This requirestermfuto be in your path. - Open a separate terminal for the debugged process.
- Run
$ ttyand copy the terminal file name's path, e.g./dev/pts/1. - Run
$ sleep 99999. - Back in the debugger, open the prompt and run
>>> tty /dev/pts/<x>, substituting your debugged process's terminal file name. - Set your breakpoint and start debugging.

