aboutsummaryrefslogtreecommitdiffstats
path: root/share/qtcreator
diff options
context:
space:
mode:
authorhjk <hjk@qt.io>2020-09-25 15:05:21 +0200
committerhjk <hjk@qt.io>2020-09-28 07:31:42 +0000
commite685bb3b11da384ae6f230438a98c260a7a8eeca (patch)
treeb5ce752ebd50c5aa8032df4624916e4ef76feaf3 /share/qtcreator
parent20883d9f5fe062c460d323c2edfb74a07e4ef4e5 (diff)
Debugger: Fix QVector dumper for Qt 6
QVector is a template alias to QList in Qt 6 and gcc creates insufficient type information for template aliases: g++ (Ubuntu 9.3.0-10ubuntu2) 9.3.0: <1><91>: Abbrev Number: 8 (DW_TAG_typedef) <92> DW_AT_name : QVector <96> DW_AT_decl_file : 1 <97> DW_AT_decl_line : 5 <98> DW_AT_decl_column : 29 <99> DW_AT_type : <0x2d> <1><9d>: Abbrev Number: clang version 10.0.0-4ubuntu1: <1><86>: Abbrev Number: 8 (DW_TAG_typedef) <87> DW_AT_type : <0x67> <8b> DW_AT_name : (indirect string, offset: 0x4a): QVector<int> <8f> DW_AT_decl_file : 1 <90> DW_AT_decl_line : 5 <1><91>: Abbrev Number: 0 In order to not regress on what the user sees we generate the full type name for the common case in the dumper. Task-number: QTCREATORBUG-24098 Change-Id: Ic0b70b1b87ee027fc3fcc0409ea23f56a175bcc3 Reviewed-by: Christian Stenger <christian.stenger@qt.io>
Diffstat (limited to 'share/qtcreator')
-rw-r--r--share/qtcreator/debugger/qttypes.py13
1 files changed, 9 insertions, 4 deletions
diff --git a/share/qtcreator/debugger/qttypes.py b/share/qtcreator/debugger/qttypes.py
index 9cb1fb1413..aa3e9ecc0c 100644
--- a/share/qtcreator/debugger/qttypes.py
+++ b/share/qtcreator/debugger/qttypes.py
@@ -2033,13 +2033,18 @@ def qform__QVector():
def qdump__QVector(d, value):
if d.qtVersion() >= 0x060000:
dd, data, size = value.split('ppi')
- _, _, alloc = d.split('iii', dd)
+ d.putItemCount(size)
+ d.putPlotData(data, size, value.type.ltarget[0])
+ # g++ 9.3 does not add the template parameter list to the debug info.
+ # Fake it for the common case:
+ if value.type.name == d.qtNamespace() + "QVector":
+ d.putBetterType(value.type.name + '<' + value.type.ltarget[0].name + '>')
else:
dd = d.extractPointer(value)
data, size, alloc = d.vectorDataHelper(dd)
- d.check(0 <= size and size <= alloc and alloc <= 1000 * 1000 * 1000)
- d.putItemCount(size)
- d.putPlotData(data, size, value.type[0])
+ d.check(0 <= size and size <= alloc and alloc <= 1000 * 1000 * 1000)
+ d.putItemCount(size)
+ d.putPlotData(data, size, value.type[0])
if False: