diff options
author | hjk <hjk@qt.io> | 2020-09-25 15:05:21 +0200 |
---|---|---|
committer | hjk <hjk@qt.io> | 2020-09-28 07:31:42 +0000 |
commit | e685bb3b11da384ae6f230438a98c260a7a8eeca (patch) | |
tree | b5ce752ebd50c5aa8032df4624916e4ef76feaf3 /share/qtcreator | |
parent | 20883d9f5fe062c460d323c2edfb74a07e4ef4e5 (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.py | 13 |
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: |