Please don't reply I should use ddd, nemiver, emacs, vim, or any other front-end, I just prefer gdb as it is, but would like to see its output with some terminal colors.
.gdbinit
You can tweak your ~/.gdbinit
to have colors. You can use mammon's .gdbinit
which is available here:
https://github.com/gdbinit/gdbinit
You can tweak it as much as you want too. I found this thanks to this SO answer. Here's the kind of output that you can obtain:
A GitHub repository is also available: https://github.com/gdbinit/Gdbinit
On a side note, the same idea was also applied to lldb.
GDB Dashboard
Following the same concept, GDB Dashboard provides a modular visual interface for GDB in Python.
(void)walker
Another similar project uses GDB's Python support to provide more extensibility, so this is worth checking out: https://github.com/dholm/voidwalker
@dholm also provides his own .gdbinit inspired from the previous one.
pwndbg
Some projects provide a set of useful functions, including improved display. This is the case for PEDA or pwndbg. The latter gives the following description:
A PEDA replacement. In the spirit of our good friend
windbg
,pwndbg
is pronouncedpwnd-bag
.
- Speed
- Resiliency
- Clean code
It provides commands to support debugging and exploit development similar to the ones from PEDA, and better display (although this is not the main focus of the project). The software is still under development, and has not been properly released yet.
voltron
The project description states:
Voltron is an extensible debugger UI for hackers. It allows you to attach utility views running in other terminals to your debugger (LLDB or GDB), displaying helpful information such as disassembly, stack contents, register values, etc, while still giving you the same debugger CLI you're used to.
You can modify your .gdbinit
to automatically integrate it. However, the display itself is outside of GDB (e.g. in a tmux split).
GEF
GEF is another option, and it is described as:
It is aimed to be used mostly by exploiters and reverse-engineers, to provide additional features to GDB using the Python API to assist during the process of dynamic analysis and exploit development.
set $SHOWCPUREGISTERS = 0
? Basically you've got several parameters that you can set, and you can always modify the code to suit your needs. –
Cord ~/.gdbinit
file breaks TUI mode, and it doesn't show the C or C++ code line anymore when you run f
or frame
:(. –
Zuber GEF
and voltron
are the best –
Decrepitate It's not colours, but consider gdb's text gui. It makes a vast difference to how usable gdb is.
You can launch it with:
gdb -tui executable.out
Screenshot:
As you can see, the main features are:
- shows what line of the source we are on and surrounding lines
- shows breakpoints
tui disable
will be added soon: https://mcmap.net/q/17210/-cannot-leave-tui-mode-with-ctrl-x-a-nor-see-program-output-in-tui-mode –
Finnie layout reg
to switch to this mode with registers and disassembly showing. –
Sisak layouts
in gdb, to see other layout options use help layout
, available options are: layout src
(this answer), layout asm
, layout split
, layout regs
. –
Devisable gdbtui
command installed if you don't want to bother with the option syntax –
Amandie I know you did not want a frontend. But how about cgdb it is very close to gdb, it is textmode but has a source window above with syntax highlight on the code.
Alt
f
by default for Readline). By the way, it doesn’t correctly shows color on my terminal, but some garbage like [?2004h
instead. –
Sedimentology New in upcoming GDB 8.3!
https://sourceware.org/git/gitweb.cgi?p=binutils-gdb.git;a=blob;f=gdb/NEWS
Terminal styling is now available for the CLI and the TUI. GNU Source Highlight can additionally be used to provide styling of source code snippets. See the "set style" commands, below, for more information.
gcc
compiler will start thrashing. –
Lasley echo 'sys-devel/gdb source-highlight' >> /etc/portage/package.use/my.use && emerge sys-devel/gdb
is what is needed to recompile with it enabled. –
Stricklan It is possible to greatly enhance the appears of gdb through the use of colors. This is done via any of the following methods:
Colorized prompt via the "set prompt". E.g., make the prompt bold and red:
set prompt \033[1;31m(gdb) \033[m
or make the prompt a new shape, bold and red:
set prompt \033[01;31m\n\n#####################################> \033[0m
Colorized commands via hooks
- Colorized syntax highlighting of the "list" command.
All examples are available at the following blog posts written by Michael Kelleher:
"Beautify GDB", May 12, 2010 (via archive.org)
"Experimental GDB syntax highlighting", May 15, 2010 (via archive.org)
set prompt \1\033[1;31m\2(gdb) \1\033[m\2
otherwise line editing on the prompt will be broken. –
Counterfeit #into .gdbinit
shell mkfifo /tmp/colorPipe
define hook-disassemble
echo \n
shell cat /tmp/colorPipe | c++filt | highlight --syntax=asm -s darkness -Oxterm256 &
set logging redirect on
set logging on /tmp/colorPipe
end
define hookpost-disassemble
hookpost-list
end
define hook-list
echo \n
shell cat /tmp/colorPipe | c++filt | highlight --syntax=cpp -s darkness -Oxterm256 &
set logging redirect on
set logging on /tmp/colorPipe
end
define hookpost-list
set logging off
set logging redirect off
shell sleep 0.1s
end
define hook-quit
shell rm /tmp/colorPipe
end
define re
hookpost-disassemble
echo \033[0m
end
document re
Restore colorscheme
end
Warning: Buggy. No TUI support, 'user-mode' hack.
Found the main part here and modified it a bit. Needs highlight, c++filt. If colors get messed up issue re command.
cgdb
is much better than gdb -tui
gdb
to work with readline's vi mode in your ~/.inputrc
you have a nice command line vim mode experience with j
and k
to go up and down history whereas in cgdb the vi navigates the source code IIRC –
Amandie Neat, I just found this hack using colout: https://github.com/nojhan/colout/blob/master/colout/example.gdbinit
bash: colout: command not found
when I run bt f
–
Lasley I wanted to highlight as follows: emphasise the lines of a stack trace which belong to my source files (rather than libraries).
The solution was to use gdb-python (on MSYS; on Linux typically gdb
comes with Python built-in already?), hook backtrace
, use
python stack_trace = gdb.execute('backtrace', False, True')
Then process stack_trace
with Python's regexes, and print them out. Bold and other colours are achieved by a function like this:
def term_style(*v):
"""1 is bold, 30--37 are the 8 colours, but specifying bold may also
change the colour. 40--47 are background colours."""
return '\x1B['+';'.join(map(str, v))+'m'
#Use like this:
print term_style(1) + 'This will be bold' + term_style(0) #Reset.
print term_style(1,30) + 'This will be bold and coloured' + term_style(0)
print term_style(1,30,40) + 'Plus coloured background' + term_style(0)
Another good combination of colors is given by this configuration. It renders inspecting the backtraces a lot easier. To use it, just save that file as ~/.gdbinit
and run gdb normally
you can get whatever colors you want;
# gdb
(gdb) shell echo -en '\E[47;34m'"\033[1m"
...
anything is now blue foreground and white background
...
(gdb) shell tput sgr0
... back to normal
© 2022 - 2024 — McMap. All rights reserved.
l
gets implemented sourceware.org/bugzilla/show_bug.cgi?id=21044 , I'll just addl
to ahook-stop
and enter Dev Nirvana. – Finnie