gdb: add 'maint set/show gnu-source-highlight enabled' command

In a later commit I want to address an issue with the Python pygments
based code styling solution.  As this approach is only used when the
GNU Source Highlight library is not available, testing bugs in this
area can be annoying, as it requires GDB to be rebuilt with use of GNU
Source Highlight disabled.

This commit adds a pair of new maintenance commands:

  maintenance set gnu-source-highlight enabled on|off
  maintenance show gnu-source-highlight enabled

these commands can be used to disable use of the GNU Source Highlight
library, allowing me, in a later commit, to easily test bugs that
would otherwise be masked by GNU Source Highlight being used.

I made this a maintenance command, rather than a general purpose
command, as it didn't seem like this was something a general user
would need to adjust.  We can always convert the maintenance command
to a general command later if needed.

There's no test for this here, but this feature will be used in a
later commit.
This commit is contained in:
Andrew Burgess 2021-11-26 15:13:43 +00:00
parent 0e42221ac2
commit 643b126809
3 changed files with 98 additions and 1 deletions

View File

@ -73,6 +73,14 @@ show debug linux-nat
maint flush source-cache
Flush the contents of the source code cache.
maint set gnu-source-highlight enabled on|off
maint show gnu-source-highlight enabled
Whether GDB should use the GNU Source Highlight library for adding
styling to source code. When off, the library will not be used, even
when available. When GNU Source Highlight isn't used, or can't add
styling to a particular source file, then the Python Pygments
library will be used instead.
* Changed commands
maint packet

View File

@ -39797,6 +39797,25 @@ unload the library and continue searching for a suitable candidate as
described in @ref{set libthread-db-search-path}. For more information
about the tests, see @ref{maint check libthread-db}.
@kindex maint set gnu-source-highlight enabled
@kindex maint show gnu-source-highlight enabled
@item maint set gnu-source-highlight enabled @r{[}on|off@r{]}
@itemx maint show gnu-source-highlight enabled
Control whether @value{GDBN} should use the GNU Source Highlight
library for applying styling to source code (@pxref{Output Styling}).
This will be @samp{on} by default if the GNU Source Highlight library
is available. If the GNU Source Highlight library is not available,
then this will be @samp{off} by default, and attempting to change this
value to @samp{on} will give an error.
If the GNU Source Highlight library is not being used, then
@value{GDBN} will use the Python Pygments package for source code
styling, if it is available.
This option is useful for debugging @value{GDBN}'s use of the Pygments
library when @value{GDBN} is linked against the GNU Source Highlight
library.
@kindex maint space
@cindex memory used by commands
@item maint space @var{value}

View File

@ -47,6 +47,46 @@
source_cache g_source_cache;
/* When this is true we will use the GNU Source Highlight to add styling to
source code (assuming the library is available). This is initialized to
true (if appropriate) in _initialize_source_cache below. */
static bool use_gnu_source_highlight;
/* The "maint show gnu-source-highlight enabled" command. */
static void
show_use_gnu_source_highlight_enabled (struct ui_file *file, int from_tty,
struct cmd_list_element *c,
const char *value)
{
fprintf_filtered (file,
_("Use of GNU Source Highlight library is \"%s\".\n"),
value);
}
/* The "maint set gnu-source-highlight enabled" command. */
static void
set_use_gnu_source_highlight_enabled (const char *ignore_args,
int from_tty,
struct cmd_list_element *c)
{
#ifndef HAVE_SOURCE_HIGHLIGHT
/* If the library is not available and the user tried to enable use of
the library, then disable use of the library, and give an error. */
if (use_gnu_source_highlight)
{
use_gnu_source_highlight = false;
error (_("the GNU Source Highlight library is not available"));
}
#else
/* We (might) have just changed how we style source code, discard any
previously cached contents. */
forget_cached_source_info ();
#endif
}
/* See source-cache.h. */
std::string
@ -192,7 +232,7 @@ source_cache::ensure (struct symtab *s)
#ifdef HAVE_SOURCE_HIGHLIGHT
bool already_styled = false;
const char *lang_name = get_language_name (SYMTAB_LANGUAGE (s));
if (lang_name != nullptr)
if (lang_name != nullptr && use_gnu_source_highlight)
{
/* The global source highlight object, or null if one was
never constructed. This is stored here rather than in
@ -363,6 +403,36 @@ _initialize_source_cache ()
_("Force gdb to flush its source code cache."),
&maintenanceflushlist);
/* All the 'maint set|show gnu-source-highlight' sub-commands. */
static struct cmd_list_element *maint_set_gnu_source_highlight_cmdlist;
static struct cmd_list_element *maint_show_gnu_source_highlight_cmdlist;
/* Adds 'maint set|show gnu-source-highlight'. */
add_setshow_prefix_cmd ("gnu-source-highlight", class_maintenance,
_("Set gnu-source-highlight specific variables."),
_("Show gnu-source-highlight specific variables."),
&maint_set_gnu_source_highlight_cmdlist,
&maint_show_gnu_source_highlight_cmdlist,
&maintenance_set_cmdlist,
&maintenance_show_cmdlist);
/* Adds 'maint set|show gnu-source-highlight enabled'. */
add_setshow_boolean_cmd ("enabled", class_maintenance,
&use_gnu_source_highlight, _("\
Set whether the GNU Source Highlight library should be used."), _("\
Show whether the GNU Source Highlight library is being used."),_("\
When enabled, GDB will use the GNU Source Highlight library to apply\n\
styling to source code lines that are shown."),
set_use_gnu_source_highlight_enabled,
show_use_gnu_source_highlight_enabled,
&maint_set_gnu_source_highlight_cmdlist,
&maint_show_gnu_source_highlight_cmdlist);
/* Enable use of GNU Source Highlight library, if we have it. */
#ifdef HAVE_SOURCE_HIGHLIGHT
use_gnu_source_highlight = true;
#endif
#if GDB_SELF_TEST
selftests::register_test ("source-cache", selftests::extract_lines_test);
#endif