diff --git a/src/plugins/debugger/gdbengine.cpp b/src/plugins/debugger/gdbengine.cpp
index 1eba4009e88b377bbb5cfc6a7b6ff3fe28462cf9..ecab614f453d91a4de4c177da405bc262660ef71 100644
--- a/src/plugins/debugger/gdbengine.cpp
+++ b/src/plugins/debugger/gdbengine.cpp
@@ -2812,40 +2812,35 @@ static QString quoteUnprintableLatin1(const QByteArray &ba)
     return res;
 }
 
+static QString decodeData(QByteArray ba, int encoding)
+{
+    switch (encoding) {
+        case 0: // unencoded 8 bit data
+            return quoteUnprintableLatin1(ba);
+        case 1: //  base64 encoded 8 bit data, used for QByteArray
+            ba = QByteArray::fromBase64(ba);
+            return '"' + quoteUnprintableLatin1(ba) + '"';
+        case 2: //  base64 encoded 16 bit data, used for QString
+            ba = QByteArray::fromBase64(ba);
+            return '"' + QString::fromUtf16((ushort *)ba.data(), ba.size() / 2) + '"';
+        case 3: //  base64 encoded 32 bit data
+            ba = QByteArray::fromBase64(ba);
+            return '"' + QString::fromUcs4((uint *)ba.data(), ba.size() / 4) + '"';
+            break;
+        case 4: //  base64 encoded 16 bit data, without quotes (see 2)
+            ba = QByteArray::fromBase64(ba);
+            return QString::fromUtf16((ushort *)ba.data(), ba.size() / 2);
+    }
+    return "<Encoding error>";
+}
+
 static void setWatchDataValue(WatchData &data, const GdbMi &mi,
     int encoding = 0)
 {
-    if (mi.isValid()) {
-        QByteArray ba;
-        QString str;
-        switch (encoding) {
-            case 0: // unencoded 8 bit data
-                ba = mi.data();
-                str = quoteUnprintableLatin1(ba);
-                break;
-            case 1: //  base64 encoded 8 bit data, used for QByteArray
-                ba = QByteArray::fromBase64(mi.data());
-                str = '"' + quoteUnprintableLatin1(ba) + '"';
-                break;
-            case 2: //  base64 encoded 16 bit data, used for QString
-                ba = QByteArray::fromBase64(mi.data());
-                str = QString::fromUtf16((ushort *)ba.data(), ba.size() / 2);
-                str = '"' + str + '"';
-                break;
-            case 3: //  base64 encoded 32 bit data
-                ba = QByteArray::fromBase64(mi.data());
-                str = QString::fromUcs4((uint *)ba.data(), ba.size() / 4);
-                str = '"' + str + '"';
-                break;
-            case 4: //  base64 encoded 16 bit data, without quotes (see 2)
-                ba = QByteArray::fromBase64(mi.data());
-                str = QString::fromUtf16((ushort *)ba.data(), ba.size() / 2);
-                break;
-        }
-        data.setValue(str);
-    } else {
+    if (mi.isValid())
+        data.setValue(decodeData(mi.data(), encoding));
+    else
         data.setValueNeeded();
-    }
 }
 
 static void setWatchDataEditValue(WatchData &data, const GdbMi &mi)
@@ -3599,17 +3594,16 @@ void GdbEngine::handleDebuggingHelperValue2(const GdbResultRecord &record,
         data1.iname = data.iname + "." + data1.name;
         if (!data1.name.isEmpty() && data1.name.at(0).isDigit())
             data1.name = '[' + data1.name + ']';
-        QString key = item.findChild("key").data();
+        QByteArray key = item.findChild("key").data();
         if (!key.isEmpty()) {
-            if (item.findChild("keyencoded").data()[0] == '1') {
-                key = '"' + QByteArray::fromBase64(key.toUtf8()) + '"';
-                if (key.size() > 13) {
-                    key = key.left(12);
-                    key += "...";
-                }
+            int encoding = item.findChild("keyencoded").data().toInt();
+            QString skey = decodeData(key, encoding);
+            if (skey.size() > 13) {
+                skey = skey.left(12);
+                skey += "...";
             }
-            //data1.name += " (" + key + ")";
-            data1.name = key;
+            //data1.name += " (" + skey + ")";
+            data1.name = skey;
         }
         setWatchDataType(data1, item.findChild("type"));
         setWatchDataExpression(data1, item.findChild("exp"));