aboutsummaryrefslogtreecommitdiffstats
path: root/share/qtcreator
diff options
context:
space:
mode:
authorMichael Weghorn <m.weghorn@posteo.de>2024-05-07 15:35:34 +0200
committerMichael Weghorn <m.weghorn@posteo.de>2024-05-08 06:29:35 +0000
commit23b7ac84a972bb90946ccc7b3aff899984eadbc5 (patch)
tree7c64396fa0fa2e5ab6f2b4ce739395d1a8aca6e8 /share/qtcreator
parentb36ddaf8ec219788fcc16bb716cb2d3bca8e7465 (diff)
Debugger: Use integer from native GDB value for typedef
Extend the solution from commit d86cf5e2358adc22feaa3cca24d4f6df9b9c457c Author: Michael Weghorn <m.weghorn@posteo.de> 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 <hjk@qt.io> Reviewed-by: <github-actions-qt-creator@cristianadam.eu>
Diffstat (limited to 'share/qtcreator')
-rw-r--r--share/qtcreator/debugger/gdbbridge.py6
1 files changed, 6 insertions, 0 deletions
diff --git a/share/qtcreator/debugger/gdbbridge.py b/share/qtcreator/debugger/gdbbridge.py
index f30b0fbafa..744d246142 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