From 1731911c4029d1b51a226e91a702f21bd13f108a Mon Sep 17 00:00:00 2001 From: hjk <qthjk@ovi.com> Date: Sat, 4 Feb 2012 00:59:31 +0100 Subject: [PATCH] debugger: implement gdb python dumper fuer std::array Change-Id: I32d353ec332d39fa80fab9780a0b084156842666 Reviewed-by: hjk <qthjk@ovi.com> --- share/qtcreator/dumper/dumper.py | 7 ++++- share/qtcreator/dumper/qttypes.py | 13 +++++++++ .../debugger/simple/simple_test_app.cpp | 28 +++++++++++++++++-- 3 files changed, 45 insertions(+), 3 deletions(-) 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<int, 4u> + # 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 <QStandardItemModel> #include <QLabel> +#if USE_CXX11 +#include <array> +#endif #include <complex> #include <deque> #include <iostream> @@ -2259,6 +2262,25 @@ namespace qxml { } // namespace qxml +namespace stdarray { + + void testStdArray() + { + #if USE_CXX11 + std::array<int, 4> a = { 1, 2, 3, 4}; + BREAK_HERE; + // Expand a. + // Check a <4 items> std::array<int>. + // Check [0] 1 int. + // Continue. + dummyStatement(&a); + #endif + } + +} // namespace stdcomplex + + + namespace stdcomplex { void testStdComplex() @@ -2266,12 +2288,13 @@ namespace stdcomplex { std::complex<double> c(1, 2); BREAK_HERE; // Expand c. - // Check c (1.000000, 2.000000) complex. + // Check c (1.000000, 2.000000) std::complex<double>. // 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(); -- GitLab