From 23b7ac84a972bb90946ccc7b3aff899984eadbc5 Mon Sep 17 00:00:00 2001 From: Michael Weghorn Date: Tue, 7 May 2024 15:35:34 +0200 Subject: Debugger: Use integer from native GDB value for typedef Extend the solution from commit d86cf5e2358adc22feaa3cca24d4f6df9b9c457c Author: Michael Weghorn Date: Thu Sep 24 12:02:06 2020 +0200 Debugger: Retrieve and remember int from native GDB value to also retrieve the int representation for numeric values from the corresponding native gdb.Value if a typedef to an integer or bool type is used, not only when an integer type is used directly. This makes expressions for bifield members in the debugger's expression view show the correct value when the type of those bitfield members is a typedef to an integer type. Extend the "Bitfields" dumper test accordingly. One real world example where incorrect values were previously shown is GtkWidgetPrivate from the GTK library [1]. [1] https://gitlab.gnome.org/GNOME/gtk/-/blob/ebc84a61854769da7583dd50ac245feaf766ed02/gtk/gtkwidgetprivate.h#L39-76 Change-Id: Ib39e00ebbfc8d7d9ab10dc89af61f37ec41fb4ee Reviewed-by: hjk Reviewed-by: --- share/qtcreator/debugger/gdbbridge.py | 6 ++++++ 1 file changed, 6 insertions(+) (limited to 'share/qtcreator') diff --git a/share/qtcreator/debugger/gdbbridge.py b/share/qtcreator/debugger/gdbbridge.py index f30b0fbafa0..744d246142c 100644 --- a/share/qtcreator/debugger/gdbbridge.py +++ b/share/qtcreator/debugger/gdbbridge.py @@ -265,6 +265,12 @@ class Dumper(DumperBase): except: # GDB only support converting integers of max. 64 bits to Python int as of now pass + elif code == gdb.TYPE_CODE_TYPEDEF: + targetType = nativeType.strip_typedefs().unqualified() + if targetType.code in [gdb.TYPE_CODE_BOOL, gdb.TYPE_CODE_INT]: + typeid = val.typeid + val = self.fromNativeValue(nativeValue.cast(targetType)) + val.typeid = typeid #elif code == gdb.TYPE_CODE_ARRAY: # val.type.ltarget = nativeValue[0].type.unqualified() return val -- cgit v1.2.3