diff --git a/share/qtcreator/dumper/dumper.py b/share/qtcreator/dumper/dumper.py index bcb41a7e7f5..311f9634603 100644 --- a/share/qtcreator/dumper/dumper.py +++ b/share/qtcreator/dumper/dumper.py @@ -278,7 +278,12 @@ def numericTemplateArgument(type, position): except RuntimeError, error: # ": No type named 30." msg = str(error) - return int(msg[14:-1]) + msg = msg[14:-1] + # gdb at least until 7.4 produces for std::array + # for template_argument(1): RuntimeError: No type named 4u. + if msg[-1] == 'u': + msg = msg[0:-1] + return int(msg) def showException(msg, exType, exValue, exTraceback): diff --git a/share/qtcreator/dumper/qttypes.py b/share/qtcreator/dumper/qttypes.py index 69c100fb294..d5ea22fa07b 100644 --- a/share/qtcreator/dumper/qttypes.py +++ b/share/qtcreator/dumper/qttypes.py @@ -1699,6 +1699,19 @@ def qdump__QxXmlAttributes(d, value): # ####################################################################### +def qdump__std__array(d, value): + size = numericTemplateArgument(value.type, 1) + d.putItemCount(size) + d.putNumChild(size) + if d.isExpanded(): + innerType = templateArgument(value.type, 0) + with Children(d, size, childType=innerType): + pcur = value.address.cast(innerType.pointer()) + for i in d.childRange(): + d.putSubItem(i, pcur.dereference()) + pcur += 1 + + def qdump__std__complex(d, value): innerType = templateArgument(value.type, 0) base = value.address.cast(innerType.pointer()) diff --git a/tests/manual/debugger/simple/simple_test_app.cpp b/tests/manual/debugger/simple/simple_test_app.cpp index db14d2d5338..6c01c1c19c1 100644 --- a/tests/manual/debugger/simple/simple_test_app.cpp +++ b/tests/manual/debugger/simple/simple_test_app.cpp @@ -158,6 +158,9 @@ void dummyStatement(...) {} #include #include +#if USE_CXX11 +#include +#endif #include #include #include @@ -2259,6 +2262,25 @@ namespace qxml { } // namespace qxml +namespace stdarray { + + void testStdArray() + { + #if USE_CXX11 + std::array a = { 1, 2, 3, 4}; + BREAK_HERE; + // Expand a. + // Check a <4 items> std::array. + // Check [0] 1 int. + // Continue. + dummyStatement(&a); + #endif + } + +} // namespace stdcomplex + + + namespace stdcomplex { void testStdComplex() @@ -2266,12 +2288,13 @@ namespace stdcomplex { std::complex c(1, 2); BREAK_HERE; // Expand c. - // Check c (1.000000, 2.000000) complex. + // Check c (1.000000, 2.000000) std::complex. // Continue. dummyStatement(&c); } -} // namespace stddeque +} // namespace stdcomplex + namespace stddeque { @@ -5972,6 +5995,7 @@ int main(int argc, char *argv[]) namespc::testNamespace(); painting::testPainting(); + stdarray::testStdArray(); stdcomplex::testStdComplex(); stddeque::testStdDeque(); stdlist::testStdList();