From d6defe8761ca7db47e3c1e1168f7869ffbb7e087 Mon Sep 17 00:00:00 2001 From: Andrew Burgess Date: Thu, 4 Jan 2024 10:57:40 +0000 Subject: gdb/python: add gdb.Frame.__repr__() method Add a gdb.Frame.__repr__() method. Before this patch we would see output like this: (gdb) pi >>> gdb.selected_frame() After this patch, we now see: (gdb) pi >>> gdb.selected_frame() More verbose, but, I hope, more useful. If the gdb.Frame becomes invalid, then we will see: (gdb) pi >>> invalid_frame_variable which is inline with how other invalid objects are displayed. Approved-By: Tom Tromey --- gdb/python/py-frame.c | 19 ++++++++++++++++++- 1 file changed, 18 insertions(+), 1 deletion(-) (limited to 'gdb/python') diff --git a/gdb/python/py-frame.c b/gdb/python/py-frame.c index f38bf5d..ee465ed 100644 --- a/gdb/python/py-frame.c +++ b/gdb/python/py-frame.c @@ -84,6 +84,23 @@ frapy_str (PyObject *self) return PyUnicode_FromString (fid.to_string ().c_str ()); } +/* Implement repr() for gdb.Frame. */ + +static PyObject * +frapy_repr (PyObject *self) +{ + frame_object *frame_obj = (frame_object *) self; + frame_info_ptr f_info = frame_find_by_id (frame_obj->frame_id); + if (f_info == nullptr) + return gdb_py_invalid_object_repr (self); + + const frame_id &fid = frame_obj->frame_id; + return PyUnicode_FromFormat ("<%s level=%d frame-id=%s>", + Py_TYPE (self)->tp_name, + frame_relative_level (f_info), + fid.to_string ().c_str ()); +} + /* Implementation of gdb.Frame.is_valid (self) -> Boolean. Returns True if the frame corresponding to the frame_id of this object still exists in the inferior. */ @@ -840,7 +857,7 @@ PyTypeObject frame_object_type = { 0, /* tp_getattr */ 0, /* tp_setattr */ 0, /* tp_compare */ - 0, /* tp_repr */ + frapy_repr, /* tp_repr */ 0, /* tp_as_number */ 0, /* tp_as_sequence */ 0, /* tp_as_mapping */ -- cgit v1.1