diff options
-rw-r--r-- | gdb/NEWS | 8 | ||||
-rw-r--r-- | gdb/doc/gdb.texinfo | 19 | ||||
-rw-r--r-- | gdb/source-cache.c | 72 |
3 files changed, 98 insertions, 1 deletions
@@ -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 diff --git a/gdb/doc/gdb.texinfo b/gdb/doc/gdb.texinfo index 2864950..fe81687 100644 --- a/gdb/doc/gdb.texinfo +++ b/gdb/doc/gdb.texinfo @@ -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} diff --git a/gdb/source-cache.c b/gdb/source-cache.c index 7016476..373607f 100644 --- a/gdb/source-cache.c +++ b/gdb/source-cache.c @@ -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 |