aboutsummaryrefslogtreecommitdiff
path: root/gdb
diff options
context:
space:
mode:
Diffstat (limited to 'gdb')
-rw-r--r--gdb/NEWS3
-rw-r--r--gdb/doc/python.texi5
-rw-r--r--gdb/python/py-value.c8
-rw-r--r--gdb/python/python-internal.h1
-rw-r--r--gdb/python/python.c2
-rw-r--r--gdb/testsuite/gdb.python/py-value.exp12
-rw-r--r--gdb/value.c8
-rw-r--r--gdb/value.h4
8 files changed, 43 insertions, 0 deletions
diff --git a/gdb/NEWS b/gdb/NEWS
index 31dff78..e190059 100644
--- a/gdb/NEWS
+++ b/gdb/NEWS
@@ -109,6 +109,9 @@ show debug lin-lwp
integer, the index of the new item in the history list, is
returned.
+ ** New function gdb.history_count(), which returns the number of
+ values in GDB's value history.
+
** New gdb.events.gdb_exiting event. This event is called with a
gdb.GdbExitingEvent object which has the read-only attribute
'exit_code', which contains the value of the GDB exit code. This
diff --git a/gdb/doc/python.texi b/gdb/doc/python.texi
index 39bf6e8..f1d1827 100644
--- a/gdb/doc/python.texi
+++ b/gdb/doc/python.texi
@@ -387,6 +387,11 @@ as its result, then placing the value into the history will allow the
user convenient access to those values via CLI history facilities.
@end defun
+@defun gdb.history_count ()
+Return an integer indicating the number of values in @value{GDBN}'s
+value history (@pxref{Value History}).
+@end defun
+
@findex gdb.convenience_variable
@defun gdb.convenience_variable (name)
Return the value of the convenience variable (@pxref{Convenience
diff --git a/gdb/python/py-value.c b/gdb/python/py-value.c
index d6ceb54..6401d96 100644
--- a/gdb/python/py-value.c
+++ b/gdb/python/py-value.c
@@ -2012,6 +2012,14 @@ gdbpy_add_history (PyObject *self, PyObject *args)
return nullptr;
}
+/* Return an integer, the number of items in GDB's history. */
+
+PyObject *
+gdbpy_history_count (PyObject *self, PyObject *args)
+{
+ return gdb_py_object_from_ulongest (value_history_count ()).release ();
+}
+
/* Return the value of a convenience variable. */
PyObject *
gdbpy_convenience_variable (PyObject *self, PyObject *args)
diff --git a/gdb/python/python-internal.h b/gdb/python/python-internal.h
index ccea5c4..5e15f62 100644
--- a/gdb/python/python-internal.h
+++ b/gdb/python/python-internal.h
@@ -412,6 +412,7 @@ extern enum ext_lang_rc gdbpy_get_matching_xmethod_workers
PyObject *gdbpy_history (PyObject *self, PyObject *args);
PyObject *gdbpy_add_history (PyObject *self, PyObject *args);
+extern PyObject *gdbpy_history_count (PyObject *self, PyObject *args);
PyObject *gdbpy_convenience_variable (PyObject *self, PyObject *args);
PyObject *gdbpy_set_convenience_variable (PyObject *self, PyObject *args);
PyObject *gdbpy_breakpoints (PyObject *, PyObject *);
diff --git a/gdb/python/python.c b/gdb/python/python.c
index 7ddc170..2c8081e 100644
--- a/gdb/python/python.c
+++ b/gdb/python/python.c
@@ -2212,6 +2212,8 @@ PyMethodDef python_GdbMethods[] =
"Get a value from history" },
{ "add_history", gdbpy_add_history, METH_VARARGS,
"Add a value to the value history list" },
+ { "history_count", gdbpy_history_count, METH_NOARGS,
+ "Return an integer, the number of values in GDB's value history" },
{ "execute", (PyCFunction) execute_gdb_command, METH_VARARGS | METH_KEYWORDS,
"execute (command [, from_tty] [, to_string]) -> [String]\n\
Evaluate command, a string, as a gdb CLI command. Optionally returns\n\
diff --git a/gdb/testsuite/gdb.python/py-value.exp b/gdb/testsuite/gdb.python/py-value.exp
index 9ee3c5f..60039c9 100644
--- a/gdb/testsuite/gdb.python/py-value.exp
+++ b/gdb/testsuite/gdb.python/py-value.exp
@@ -647,6 +647,17 @@ proc test_value_sub_classes {} {
"check printing of MyValue when initiaized with a type"
}
+# Test the history count. This must be the first thing called after
+# starting GDB as it depends on there being nothing in the value
+# history.
+proc test_history_count {} {
+ for { set i 0 } { $i < 5 } { incr i } {
+ gdb_test "python print('history count is %d' % gdb.history_count())" \
+ "history count is $i" "history count is $i"
+ gdb_test "print $i" " = $i"
+ }
+}
+
# Build C version of executable. C++ is built later.
if { [build_inferior "${binfile}" "c"] < 0 } {
return -1
@@ -658,6 +669,7 @@ clean_restart ${binfile}
# Skip all tests if Python scripting is not enabled.
if { [skip_python_tests] } { continue }
+test_history_count
test_value_creation
test_value_reinit
test_value_numeric_ops
diff --git a/gdb/value.c b/gdb/value.c
index 37c949f..7bd9891 100644
--- a/gdb/value.c
+++ b/gdb/value.c
@@ -1909,6 +1909,14 @@ access_value_history (int num)
return value_copy (value_history[absnum].get ());
}
+/* See value.h. */
+
+ULONGEST
+value_history_count ()
+{
+ return value_history.size ();
+}
+
static void
show_values (const char *num_exp, int from_tty)
{
diff --git a/gdb/value.h b/gdb/value.h
index f91c5a5..0de4b5f 100644
--- a/gdb/value.h
+++ b/gdb/value.h
@@ -948,6 +948,10 @@ extern void binop_promote (const struct language_defn *language,
extern struct value *access_value_history (int num);
+/* Return the number of items in the value history. */
+
+extern ULONGEST value_history_count ();
+
extern struct value *value_of_internalvar (struct gdbarch *gdbarch,
struct internalvar *var);