From 41da97fb2cfb88baa7872d370e1e9665c85432d2 Mon Sep 17 00:00:00 2001 From: hjk Date: Mon, 25 Feb 2019 16:16:02 +0100 Subject: [PATCH] Debugger: Do not make std::string layout assumptions ... when non-std allocator is used. Task-number: QTCREATORBUG-22040 Change-Id: I67785095f50058851c358a45ef19e0c41743fe4f Reviewed-by: Orgad Shaneh Reviewed-by: hjk Reviewed-by: Christian Stenger --- share/qtcreator/debugger/stdtypes.py | 15 ++++++++++++++- 1 file changed, 14 insertions(+), 1 deletion(-) diff --git a/share/qtcreator/debugger/stdtypes.py b/share/qtcreator/debugger/stdtypes.py index 154e0ad67e0..8810e099127 100644 --- a/share/qtcreator/debugger/stdtypes.py +++ b/share/qtcreator/debugger/stdtypes.py @@ -1024,7 +1024,20 @@ def qdump__std__basic_string(d, value): def qdump__std____cxx11__basic_string(d, value): innerType = value.type[0] - (data, size) = value.split("pI") + try: + allocator = value.type[2].name + except: + allocator = '' + if allocator == 'std::allocator<%s>' % innerType.name: + (data, size) = value.split("pI") + else: + try: + data = value["_M_dataplus"]["_M_p"] + size = int(value["_M_string_length"]) + except: + d.putEmptyValue() + d.putPlainChildren(value) + return d.check(0 <= size) #and size <= alloc and alloc <= 100*1000*1000) d.putCharArrayHelper(data, size, innerType, d.currentItemFormat())