diff options
author | Marco Barisione <mbarisione@undo.io> | 2019-04-01 09:59:53 +0200 |
---|---|---|
committer | Marco Barisione <mbarisione@undo.io> | 2019-04-01 10:00:04 +0200 |
commit | 52093e1b936fa4f3f8bb3868c5a44d0df25c8db4 (patch) | |
tree | 469d4c4d62e846bdd08b14a8beffbe4c975fd3ff /gdb/testsuite/gdb.python/py-format-string.c | |
parent | 8828efdb24ef337e074183a0db3ac6399a3c09ba (diff) | |
download | binutils-52093e1b936fa4f3f8bb3868c5a44d0df25c8db4.zip binutils-52093e1b936fa4f3f8bb3868c5a44d0df25c8db4.tar.gz binutils-52093e1b936fa4f3f8bb3868c5a44d0df25c8db4.tar.bz2 |
Add gdb.Value.format_string ()
The str () function, called on a gdb.Value instance, produces a string
representation similar to what can be achieved with the print command,
but it doesn't allow to specify additional formatting settings, for
instance disabling pretty printers.
This patch introduces a new format_string () method to gdb.Value which
allows specifying more formatting options, thus giving access to more
features provided by the internal C function common_val_print ().
gdb/ChangeLog:
2019-04-01 Marco Barisione <mbarisione@undo.io>
Add gdb.Value.format_string ().
* python/py-value.c (copy_py_bool_obj):
(valpy_format_string): Add gdb.Value.format_string ().
* NEWS: Document the addition of gdb.Value.format_string ().
gdb/doc/ChangeLog:
2019-04-01 Marco Barisione <mbarisione@undo.io>
* python.texi (Values From Inferior): Document
gdb.Value.format_string ().
gdb/testsuite/ChangeLog:
2019-04-01 Marco Barisione <mbarisione@undo.io>
Test gdb.Value.format_string ().
* gdb.python/py-format-string.exp: New test.
* gdb.python/py-format-string.c: New file.
* gdb.python/py-format-string.py: New file.
Diffstat (limited to 'gdb/testsuite/gdb.python/py-format-string.c')
-rw-r--r-- | gdb/testsuite/gdb.python/py-format-string.c | 118 |
1 files changed, 118 insertions, 0 deletions
diff --git a/gdb/testsuite/gdb.python/py-format-string.c b/gdb/testsuite/gdb.python/py-format-string.c new file mode 100644 index 0000000..120ecce --- /dev/null +++ b/gdb/testsuite/gdb.python/py-format-string.c @@ -0,0 +1,118 @@ +/* This testcase is part of GDB, the GNU debugger. + + Copyright 2019 Free Software Foundation, Inc. + + 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/>. */ + +typedef struct point +{ + int x; + int y; +} point_t; + +typedef union +{ + int an_int; + char a_char; +} union_t; + +typedef struct +{ + union_t the_union; +} struct_union_t; + +typedef enum +{ + ENUM_FOO, + ENUM_BAR, +} enum_t; + +typedef void (*function_t) (int); + +static void +my_function(int n) +{ +} + +#ifdef __cplusplus + +struct Base +{ + Base (int a_) : a (a_) {} + + virtual int get_number () { return a; } + + int a; + + static int a_static_member; +}; + +int Base::a_static_member = 2019; + +struct Deriv : Base +{ + Deriv (int b_) : Base (42), b (b_) {} + + virtual int get_number () { return b; } + + int b; +}; + +#endif + +int global_symbol = 42; + +int +main () +{ + point_t a_point_t = { 42, 12 }; + point_t *a_point_t_pointer = &a_point_t; +#ifdef __cplusplus + point_t &a_point_t_ref = a_point_t; +#endif + struct point another_point = { 123, 456 }; + + struct_union_t a_struct_with_union; + a_struct_with_union.the_union.an_int = 42; + + enum_t an_enum = ENUM_BAR; + + const char *a_string = "hello world"; + const char *a_binary_string = "hello\0world"; + const char a_binary_string_array[] = "hello\0world"; + + const int letters_repeat = 10; + char a_big_string[26 * letters_repeat + 1]; + a_big_string[26 * letters_repeat] = '\0'; + for (int i = 0; i < letters_repeat; i++) + for (char c = 'A'; c <= 'Z'; c++) + a_big_string[i * 26 + c - 'A'] = c; + + int an_array[] = { 2, 3, 5 }; + + int an_array_with_repetition[] = { + 1, /* 1 time. */ + 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, /* 12 times. */ + 5, 5, 5, /* 3 times */ + }; + + int *a_symbol_pointer = &global_symbol; + +#ifdef __cplusplus + Deriv a_deriv (123); + Base &a_base_ref = a_deriv; +#endif + + return 0; /* break here */ +} |