diff --git a/share/qtcreator/debugger/stdtypes.py b/share/qtcreator/debugger/stdtypes.py index 1c98c767258..bc4bb84dcbb 100644 --- a/share/qtcreator/debugger/stdtypes.py +++ b/share/qtcreator/debugger/stdtypes.py @@ -697,6 +697,36 @@ def qdump__std__pair(d, value): d.putValue('(%s, %s)' % (key, value)) +def qdumpHelper_get_tuple_elements(d, tuple, value_typename, value_member): + """ + Helper method that returns the elements of a tuple. + """ + elems = [] + other_members = [] + for member in tuple.members(True): + if not member.type.templateArguments(): + continue + if member.type.name.startswith(value_typename): + elems.append(member[value_member]) + else: + other_members.append(member) + for member in other_members: + sub_elems = qdumpHelper_get_tuple_elements(d, member, value_typename, value_member) + elems = elems + sub_elems + return elems + + +def qdump__std__tuple(d, value): + if d.isMsvcTarget(): + elems = qdumpHelper_get_tuple_elements(d, value, "std::_Tuple_val", "_Val") + else: + elems = qdumpHelper_get_tuple_elements(d, value, "std::_Head_base", "_M_head_impl") + d.putItemCount(len(elems)) + with Children(d): + for elem in elems: + d.putSubItem(0, elem) + + def qform__std__unordered_map(): return [DisplayFormat.CompactMap] diff --git a/tests/auto/debugger/tst_dumpers.cpp b/tests/auto/debugger/tst_dumpers.cpp index 613eb9c72bb..1cf8f1bbf2f 100644 --- a/tests/auto/debugger/tst_dumpers.cpp +++ b/tests/auto/debugger/tst_dumpers.cpp @@ -5348,6 +5348,18 @@ void tst_Dumpers::dumper_data() + Check("v.0", "[0]", "\"foo\"", "std::string"); + QTest::newRow("StdTuple") + << Data("#include \n", + + "std::tuple tuple = std::make_tuple(123, std::string(\"hello\"), 456);\n", + + "&tuple") + + + Check("tuple.0", "[0]", "123", "int") + + Check("tuple.1", "[1]", "\"hello\"", "std::string") + + Check("tuple.2", "[2]", "456", "int"); + + QTest::newRow("StdValArray") << Data("#include \n" "#include \n",