aboutsummaryrefslogtreecommitdiff
path: root/gdb/testsuite/gdb.python/py-format-string.c
diff options
context:
space:
mode:
authorMarco Barisione <mbarisione@undo.io>2019-04-01 09:59:53 +0200
committerMarco Barisione <mbarisione@undo.io>2019-04-01 10:00:04 +0200
commit52093e1b936fa4f3f8bb3868c5a44d0df25c8db4 (patch)
tree469d4c4d62e846bdd08b14a8beffbe4c975fd3ff /gdb/testsuite/gdb.python/py-format-string.c
parent8828efdb24ef337e074183a0db3ac6399a3c09ba (diff)
downloadbinutils-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.c118
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 */
+}