From cb390587facdb8fc5a67118d1e07edf5e8059401 Mon Sep 17 00:00:00 2001
From: Friedemann Kleint <Friedemann.Kleint@nokia.com>
Date: Mon, 18 Oct 2010 15:04:49 +0200
Subject: [PATCH] Debugger: Fix Python-based dumping of std::string.

Sometimes, std::string is seen instead of std::basic_string<>.

Reviewed-by: hjk
Reviewed-by: Arvid Ephraim Picciani <arvid.picciani@nokia.com>
Task-number: QTCREATORBUG-2662
---
 share/qtcreator/gdbmacros/gdbmacros.py | 9 ++++++++-
 1 file changed, 8 insertions(+), 1 deletion(-)

diff --git a/share/qtcreator/gdbmacros/gdbmacros.py b/share/qtcreator/gdbmacros/gdbmacros.py
index 642de72972a..b2f23993fbc 100644
--- a/share/qtcreator/gdbmacros/gdbmacros.py
+++ b/share/qtcreator/gdbmacros/gdbmacros.py
@@ -2077,7 +2077,14 @@ def qdump__std__string(d, item):
     baseType = item.value.type.unqualified().strip_typedefs()
     if baseType.code == gdb.TYPE_CODE_REF:
         baseType = baseType.target().unqualified().strip_typedefs()
-    charType = baseType.template_argument(0)
+    # We might encounter 'std::string' or 'std::basic_string<>'
+    # or even 'std::locale::string' on MinGW due to some type lookup glitch.
+    if str(baseType) == 'std::string' or str(baseType) == 'std::locale::string':
+        charType = lookupType("char")
+    elif str(baseType) == 'std::wstring':
+        charType = lookupType("wchar_t")
+    else:
+        charType = baseType.template_argument(0)
     repType = lookupType("%s::_Rep" % baseType).pointer()
     rep = (data.cast(repType) - 1).dereference()
     size = rep['_M_length']
-- 
GitLab