diff --git a/share/qtcreator/debugger/stdtypes.py b/share/qtcreator/debugger/stdtypes.py index c6693f70b69..b08b9d603de 100644 --- a/share/qtcreator/debugger/stdtypes.py +++ b/share/qtcreator/debugger/stdtypes.py @@ -800,7 +800,10 @@ def qdump__std____1__shared_ptr(d, value): def qdump__std__unique_ptr(d, value): - p = d.extractPointer(value) + if value.type.size() == d.ptrSize(): + p = d.extractPointer(value) + else: + _, p = value.split("pp"); # For custom deleters. if p == 0: d.putValue("(null)") d.putNumChild(0) diff --git a/tests/auto/debugger/tst_dumpers.cpp b/tests/auto/debugger/tst_dumpers.cpp index 684c076ff27..9bbd10b2669 100644 --- a/tests/auto/debugger/tst_dumpers.cpp +++ b/tests/auto/debugger/tst_dumpers.cpp @@ -4706,14 +4706,19 @@ void tst_Dumpers::dumper_data() QTest::newRow("StdUniquePtr") << Data("#include \n" - "#include \n" + fooData, + "#include \n" + fooData + + + "static Foo *alloc_foo() { return new Foo; }\n" + "static void free_foo(Foo *f) { delete f; }\n", "std::unique_ptr p0;\n\n" "std::unique_ptr p1(new int(32));\n\n" "std::unique_ptr p2(new Foo);\n\n" - "std::unique_ptr p3(new std::string(\"ABC\"));", + "std::unique_ptr p3(new std::string(\"ABC\"));\n" - "&p0, &p1, &p2, &p3") + "std::unique_ptr p4{alloc_foo(), free_foo};", + + "&p0, &p1, &p2, &p3, &p4") + CoreProfile() + Cxx11Profile() @@ -4722,7 +4727,8 @@ void tst_Dumpers::dumper_data() + Check("p0", "(null)", "std::unique_ptr >") + Check("p1", "32", "std::unique_ptr >") + Check("p2", Pointer(), "std::unique_ptr >") - + Check("p3", "\"ABC\"", "std::unique_ptr >"); + + Check("p3", "\"ABC\"", "std::unique_ptr >") + + Check("p4.b", "2", "int"); QTest::newRow("StdOnce")