binutils-gdb/gdb/tui/tui.h
Andrew Burgess 7421ccda76 gdb/tui: add a tui debugging flag
This commit adds 'set debug tui on|off' and 'show debug tui'.  This
commit adds the control variable, and the printing macros in
tui/tui.h.  I've then added some uses of these in tui.c and
tui-layout.c.

To help produce more useful debug output in tui-layout.c, I've added
some helper member functions in the class tui_layout_split, and also
moved the size_info struct out of tui_layout_split::apply into the
tui_layout_split class.

If tui debug is not turned on, then there should be no user visible
changes after this commit.

One thing to note is that, due to the way that the tui terminal is
often cleared, the only way I've found this useful is when I do:

  (gdb) tui enable
  (gdb) set logging file /path/to/file
  (gdb) set logging debugredirect on
  (gdb) set logging enable on

Additionally, gdb has some quirks when it comes to setting up logging
redirect and switching interpreters.  Thus, the above only really
works if the logging is enabled after the tui is enabled, and disabled
again before the tui is disabled.

Enabling logging and switching interpreters can cause undefined
results, including crashes.  This is an existing bug in gdb[1], and
has nothing directly to do with tui debug, but it is worth mentioning
here I think.

[1] https://sourceware.org/bugzilla/show_bug.cgi?id=28948
2022-04-03 15:31:46 +01:00

99 lines
2.6 KiB
C

/* External/Public TUI Header File.
Copyright (C) 1998-2022 Free Software Foundation, Inc.
Contributed by Hewlett-Packard Company.
This file is part of GDB.
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 3 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>. */
#ifndef TUI_TUI_H
#define TUI_TUI_H
/* Flag to control tui debugging. */
extern bool debug_tui;
/* Print a "tui" debug statement. */
#define tui_debug_printf(fmt, ...) \
debug_prefixed_printf_cond (debug_tui, "tui", fmt, ##__VA_ARGS__)
/* Print "tui" enter/exit debug statements. */
#define TUI_SCOPED_DEBUG_ENTER_EXIT \
scoped_debug_enter_exit (debug_tui, "tui")
struct ui_file;
/* Types of error returns. */
enum tui_status
{
TUI_SUCCESS,
TUI_FAILURE
};
/* Types of windows. */
enum tui_win_type
{
SRC_WIN = 0,
DISASSEM_WIN,
DATA_WIN,
CMD_WIN,
STATUS_WIN,
/* This must ALWAYS be AFTER the major windows last. */
MAX_MAJOR_WINDOWS,
};
extern CORE_ADDR tui_get_low_disassembly_address (struct gdbarch *,
CORE_ADDR, CORE_ADDR);
extern void tui_show_assembly (struct gdbarch *gdbarch, CORE_ADDR addr);
extern bool tui_is_window_visible (enum tui_win_type type);
extern bool tui_get_command_dimension (unsigned int *width,
unsigned int *height);
/* Initialize readline and configure the keymap for the switching key
shortcut. May be called more than once without issue. */
extern void tui_ensure_readline_initialized ();
/* Enter in the tui mode (curses). */
extern void tui_enable (void);
/* Leave the tui mode. */
extern void tui_disable (void);
enum tui_key_mode
{
/* Plain command mode to enter gdb commands. */
TUI_COMMAND_MODE,
/* SingleKey mode with some keys bound to gdb commands. */
TUI_SINGLE_KEY_MODE,
/* Read/edit one command and return to SingleKey after it's
processed. */
TUI_ONE_COMMAND_MODE
};
extern enum tui_key_mode tui_current_key_mode;
/* Change the TUI key mode by installing the appropriate readline
keymap. */
extern void tui_set_key_mode (enum tui_key_mode mode);
extern bool tui_active;
#endif /* TUI_TUI_H */