mirror of
https://sourceware.org/git/binutils-gdb.git
synced 2024-12-24 09:43:36 +08:00
7f6aba03b9
This introduces a new "metadata" style and changes many places in gdb to use it. The idea here is to let the user distinguish gdb output from output that (conceptually at least) comes directly from the inferior. The newly-styled category includes text that gdb traditionally surrounds in "<...>", like "<unavailable>". I only added a single test for this. In many cases this output is difficult to test. Also, while developing this errors in the implementation of the new printf formats showed up as regressions. gdb/ChangeLog 2019-10-01 Tom Tromey <tom@tromey.com> * p-lang.c (pascal_printstr): Use metadata style. * value.c (show_convenience): Use metadata style. * valprint.c (valprint_check_validity, val_print_optimized_out) (val_print_not_saved, val_print_unavailable) (val_print_invalid_address, generic_val_print, val_print) (value_check_printable, val_print_array_elements): Use metadata style. * ui-out.h (class ui_out) <field_fmt>: New overload. <do_field_fmt>: Add style parameter. * ui-out.c (ui_out::field_fmt): New overload. * typeprint.c (type_print_unknown_return_type) (val_print_not_allocated, val_print_not_associated): Use metadata style. * tui/tui-out.h (class tui_ui_out) <do_field_fmt>: Add style parameter. * tui/tui-out.c (tui_ui_out::do_field_fmt): Update. * tracepoint.c (tvariables_info_1): Use metadata style. * stack.c (print_frame_arg, print_frame_info, print_frame) (info_frame_command_core): Use metadata style. * skip.c (info_skip_command): Use metadata style. * rust-lang.c (rust_print_enum): Use metadata style. * python/py-prettyprint.c (print_stack_unless_memory_error): Use metadata style. * python/py-framefilter.c (py_print_single_arg): Use metadata style. * printcmd.c (do_one_display, print_variable_and_value): Use metadata style. * p-valprint.c (pascal_val_print) (pascal_object_print_value_fields): Use metadata style. * p-typeprint.c (pascal_type_print_base): Use metadata style. * mi/mi-out.h (class mi_ui_out) <do_field_fmt>: Add style parameter. * mi/mi-out.c (mi_ui_out::do_field_fmt): Update. * m2-valprint.c (m2_print_long_set): Use metadata style. * m2-typeprint.c (m2_print_type): Use metadata style. * infcmd.c (print_return_value_1): Use metadata style. * gnu-v3-abi.c (print_one_vtable): Use metadata style. * f-valprint.c (info_common_command_for_block): Use metadata style. * f-typeprint.c (f_type_print_base): Use metadata style. * expprint.c (print_subexp_standard): Use metadata style. * cp-valprint.c (cp_print_value_fields): Use metadata style. * cli/cli-style.h (class cli_style_option): Add constructor. (metadata_style): Declare. * cli/cli-style.c (metadata_style): New global. (_initialize_cli_style): Register metadata style. * cli-out.h (class cli_ui_out) <do_field_fmt>: Add style parameter. * cli-out.c (cli_ui_out::do_field_fmt): Update. * c-typeprint.c (c_type_print_base_struct_union) (c_type_print_base_1): Use metadata style. * breakpoint.c (watchpoint_value_print) (print_one_breakpoint_location): Use metadata style. * break-catch-syscall.c (print_one_catch_syscall): Use metadata style. * break-catch-sig.c (signal_catchpoint_print_one): Use metadata style. * ada-valprint.c (val_print_packed_array_elements, printstr) (print_field_values, ada_val_print_ref, ada_val_print): Use metadata style. * ada-typeprint.c (print_array_type, ada_print_type): Use metadata style. * ada-tasks.c (print_ada_task_info, info_task): Use metadata style. * ada-lang.c (user_select_syms): Use metadata style. gdb/testsuite/ChangeLog 2019-10-01 Tom Tromey <tom@tromey.com> * lib/gdb-utils.exp (style): Handle "metadata" argument. * gdb.base/style.exp: Add metadata style test.
67 lines
2.6 KiB
C++
67 lines
2.6 KiB
C++
/* Copyright (C) 2016-2019 Free Software Foundation, Inc.
|
|
|
|
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_OUT_H
|
|
#define TUI_TUI_OUT_H
|
|
|
|
#include "cli-out.h"
|
|
|
|
/* A ui_out class for the TUI. This is just like the CLI's ui_out,
|
|
except that it overrides output methods to detect when a source
|
|
line is being printed and show the source in the TUI's source
|
|
window instead of printing the line in the console window. */
|
|
class tui_ui_out : public cli_ui_out
|
|
{
|
|
public:
|
|
|
|
explicit tui_ui_out (ui_file *stream);
|
|
|
|
protected:
|
|
|
|
void do_field_signed (int fldno, int width, ui_align align, const char *fldname,
|
|
LONGEST value) override;
|
|
void do_field_string (int fldno, int width, ui_align align, const char *fldname,
|
|
const char *string, const ui_file_style &style) override;
|
|
void do_field_fmt (int fldno, int width, ui_align align, const char *fldname,
|
|
const ui_file_style &style,
|
|
const char *format, va_list args) override
|
|
ATTRIBUTE_PRINTF (7, 0);
|
|
void do_text (const char *string) override;
|
|
|
|
private:
|
|
|
|
/* These fields are used to make print_source_lines show the source
|
|
in the TUI's source window instead of in the console.
|
|
M_START_OF_LINE is incremented whenever something is output to
|
|
the ui_out. If an integer field named "line" is printed on the
|
|
ui_out, and nothing else has been printed yet (both
|
|
M_START_OF_LINE and M_LINE are still 0), we assume
|
|
print_source_lines is starting to print a source line, and thus
|
|
record the line number in M_LINE. Afterwards, when we see a
|
|
string field named "fullname" being output, we take the fullname
|
|
and the recorded line and show the source line in the TUI's
|
|
source window. tui_ui_out::do_text() suppresses text output
|
|
until it sees an endline being printed, at which point these
|
|
variables are reset back to 0. */
|
|
int m_line = 0;
|
|
int m_start_of_line = 0;
|
|
};
|
|
|
|
extern tui_ui_out *tui_out_new (struct ui_file *stream);
|
|
|
|
#endif /* TUI_TUI_OUT_H */
|