146

I was just debugging a program in gdb and somehow I found a new feature I've never seen or even heard of before, a split view where I can see and browse the code in addition to giving commands:

Sorry about the picture, but ttys don't have screenshots.

What is this? What did I do, or, more specifically, how can I get this split-screen mode again? Is there a name for this mode, or somewhere I can read about how to use it?

Kevin
  • 53,822
  • 15
  • 101
  • 132
  • 3
    For quick reference: You can exit this mode using any of C-x C-a, C-x a, or C-x A.` See [this question](http://stackoverflow.com/questions/14147117/how-to-exit-the-wh-mode-in-gdb). – Richard May 07 '18 at 20:53
  • But those are my emacs bindings.... thank `gud`. – artless noise Aug 15 '22 at 22:27

9 Answers9

118

It's called the TUI (no kidding). Start for example with gdbtui or gdb -tui ...


Please also see this answer by Ciro Santilli. It wasn't available in 2012 to the best of my knowledge, but definitely worth a look.

Matthias Braun
  • 32,039
  • 22
  • 142
  • 171
0xC0000022L
  • 20,597
  • 9
  • 86
  • 152
112

You can trigger it dynamically by push ctrl+x and ctrl+a.

Unni Kris
  • 3,081
  • 4
  • 35
  • 57
POHAN WU
  • 1,121
  • 1
  • 7
  • 2
47

There are two variants of it.

  1. to only see code Press

Press CTRL X together and then 1

  1. To see both source and assembly

Press 'CTRL' 'X' together and then '2'

http://www.cs.fsu.edu/~baker/ada/gnat/html/gdb_23.html

A screen shot of the view with code and assembly. enter image description here

Also check out this amazing Github project.

abhi
  • 3,476
  • 5
  • 41
  • 58
28

GDB Dashboard

https://github.com/cyrus-and/gdb-dashboard

GDB dashboard uses the official GDB Python API and prints the information that you want when GDB stops e.g. after a next, like the native display command.

GDB dashboard vs GDB's TUI mode:

  • more robust, as it just prints to stdout instead of putting the shell on a more magic curses state, e.g.:

  • highly configurable from Python: you can select what you want to output and how big each section is depending on what you are debugging.

    The most useful views are already implemented: source, assembly, registers, stack, memory, threads, expressions... but it should be easy to extend it with any information that is exposed on the GDB Python API.

    TUI only allows showing two of source, assembly and registers and that is it. Unless you want to modify its C source code of course ;-)

GDB Dashboard screenshot

I believe that GDB should ship with a setup like that out of the box and turned on by default, it would attract much more users that way.

Oh, and the main developer, Andrea Cardaci, has been very responsive and awesome. Big kudos.

See also: How to highlight and color gdb output during interactive debugging?

Matthias Braun
  • 32,039
  • 22
  • 142
  • 171
Ciro Santilli OurBigBook.com
  • 347,512
  • 102
  • 1,199
  • 985
  • 3
    There are not enough words to describe how awesome that is. Thanks :) – unresolved_external Dec 20 '19 at 15:57
  • 1
    Nice, I just re-visited this question (or rather my answer) and found _your_ answer. Awesome. Will refer to your answer from mine, to make sure folks don't miss out on it. – 0xC0000022L Sep 15 '20 at 19:40
  • 1
    Is it possible to configure it to split vertically as opposed to the horizontal split it does by default in the TUI mode? – SamuelMyself Dec 30 '20 at 10:43
  • @SamuelMyself I've never seen that, open an issue to double check, might be an interesting feature. – Ciro Santilli OurBigBook.com Dec 30 '20 at 10:44
  • 2
    @CiroSantilli郝海东冠状病六四事件法轮功 Well, found [this](https://gdb-prs.sourceware.narkive.com/FS3Z3lBr/bug-tui-17850-new-vertically-splitting-windows-in-gdb-tui). It was already requested 6 years ago but seems like no one's worked/working on it yet :( – SamuelMyself Dec 31 '20 at 08:53
  • @SamuelMyself ah, I meant on GDB Dashboard issues. It is 10x easier to add any new feature there (python vs C, new project vs dinosaur), and therefor 10x more likely to get done. Good to know about the GDB request though. – Ciro Santilli OurBigBook.com Dec 31 '20 at 08:54
  • Oh! Sorry for the confusion. – SamuelMyself Dec 31 '20 at 10:34
17

You can also start it from the gdb shell using the command "-" (dash). Not sure how to dynamically turn it off though.

Neowizard
  • 2,981
  • 1
  • 21
  • 39
14

Type layout as a command in gdb and the split window will be shown.

Martin Thoma
  • 124,992
  • 159
  • 614
  • 958
alfred
  • 141
  • 1
  • 2
10

When GDB is in the standard mode, using win will automatically switch in the TUI mode.
Other command for TUI mode:

  • info win
    List and give the size of all displayed windows.
  • focus next | prev | src | asm | regs | split
    Set the focus to the named window. This command allows to change the active window so that scrolling keys can be affected to another window.

Read here form more help.

girardengo
  • 726
  • 12
  • 16
2

There is also interface tool for GDB called cgdb. Even with some color highlighting. "ESC" to switch to code view, "i" to switch back to gdb

cgdb

user3042599
  • 517
  • 4
  • 5
2

tui mode was clearly inspired by emacs -- I discovered it by accident when I hit ^X-o, which switches among split windows in emacs -- I sometimes hit that absent-mindedly when what I should be doing is switching to a different program. Anyway, that leads to another feature not mentioned yet, that you can move the cursor from the code window (where you can scroll) to the command line, or vice versa, with ^X-o.

Blob
  • 146
  • 5
  • Obviously most of the programs from GNU have emacs like keybindings, mainly because of consistency reasons. I know there is a vi mode in bash, but that is not nearly good enough as emacs mode. – 3N4N Apr 04 '19 at 18:26