diff --git a/share/qtcreator/debugger/dumper.py b/share/qtcreator/debugger/dumper.py index d8670400a26..1e3d4bf184e 100644 --- a/share/qtcreator/debugger/dumper.py +++ b/share/qtcreator/debugger/dumper.py @@ -2862,6 +2862,9 @@ class DumperBase: elif isinstance(index, self.dumper.Field): field = index elif self.dumper.isInt(index): + if self.type.code in (TypeCodeArray, TypeCodePointer): + itemAddress = self.laddress + int(index) * self.type.ltarget.size() + return self.dumper.createValue(itemAddress, self.type.ltarget) return self.members(False)[index] else: error('BAD INDEX TYPE %s' % type(index)) diff --git a/share/qtcreator/debugger/misctypes.py b/share/qtcreator/debugger/misctypes.py index 54af7e6414c..387c5225f7d 100644 --- a/share/qtcreator/debugger/misctypes.py +++ b/share/qtcreator/debugger/misctypes.py @@ -315,3 +315,14 @@ def qdump__WTF__String(d, value): charSize = 2 d.putCharArrayHelper(bufferPtr, stringLength, charSize) + + +####################################################################### +# +# Internal test +# +####################################################################### + +def qdump__QtcDumperTest_FieldAccessByIndex(d, value): + d.putValue(value["d"][2].integer()) + diff --git a/tests/auto/debugger/tst_dumpers.cpp b/tests/auto/debugger/tst_dumpers.cpp index 37176ae41cc..00595375feb 100644 --- a/tests/auto/debugger/tst_dumpers.cpp +++ b/tests/auto/debugger/tst_dumpers.cpp @@ -6239,6 +6239,11 @@ void tst_Dumpers::dumper_data() + Check("v15", "\"utf16\"", "@QJSValue (QString)") + Check("v15.1", "[1]", "116", "@QChar"); + QTest::newRow("Internal1") + << Data("struct QtcDumperTest_FieldAccessByIndex { int d[3] = { 10, 11, 12 }; };\n", + "QtcDumperTest_FieldAccessByIndex d; unused(&d);\n") + + Check("d", "12", "QtcDumperTest_FieldAccessByIndex"); + #if 0 #ifdef Q_OS_LINUX // Hint: To open a failing test in Creator, do: