diff --git a/src/plugins/debugger/cdb/cdbengine.cpp b/src/plugins/debugger/cdb/cdbengine.cpp
index 081a759d4978414f8447f17ddff4f86a46839e3c..6ca5c776cbd98240cda56f91ebbdf9faf0671885 100644
--- a/src/plugins/debugger/cdb/cdbengine.cpp
+++ b/src/plugins/debugger/cdb/cdbengine.cpp
@@ -1802,8 +1802,8 @@ void CdbEngine::handlePid(const CdbExtensionCommandPtr &reply)
     }
 }
 
-// Parse CDB gdbmi register syntax
-static inline Register parseRegister(const GdbMi &gdbmiReg)
+// Parse CDB gdbmi register syntax.
+static Register parseRegister(const GdbMi &gdbmiReg)
 {
     Register reg;
     reg.name = gdbmiReg.findChild("name").data();
@@ -1813,7 +1813,7 @@ static inline Register parseRegister(const GdbMi &gdbmiReg)
         reg.name += description.data();
         reg.name += ')';
     }
-    reg.value = QString::fromAscii(gdbmiReg.findChild("value").data());
+    reg.value = gdbmiReg.findChild("value").data();
     return reg;
 }
 
diff --git a/src/plugins/debugger/gdb/gdbengine.cpp b/src/plugins/debugger/gdb/gdbengine.cpp
index a178e43252c2b8c44dd41cfe7747aa1c11f9364d..344f73dfb185312b64f268043a26e4e18cd7f36b 100644
--- a/src/plugins/debugger/gdb/gdbengine.cpp
+++ b/src/plugins/debugger/gdb/gdbengine.cpp
@@ -3651,10 +3651,10 @@ void GdbEngine::handleRegisterListValues(const GdbResponse &response)
     // 24^done,register-values=[{number="0",value="0xf423f"},...]
     const GdbMi values = response.data.findChild("register-values");
     QTC_ASSERT(registerCount == values.children().size(), return);
-    for (int i = 0; i != registerCount; ++i) {
-        const GdbMi &item = values.children().at(i);
-        GdbMi val = item.findChild("value");
-        registers[i].value = _(val.data());
+    foreach (const GdbMi &item, values.children()) {
+        const int number = item.findChild("number").data().toInt();
+        if (number >= 0 && number < registerCount)
+            registers[number].value = item.findChild("value").data();
     }
     registerHandler()->setAndMarkRegisters(registers);
 }
diff --git a/src/plugins/debugger/registerhandler.h b/src/plugins/debugger/registerhandler.h
index 5c2ac6adb32e23307f3c21b3966d4dae6b0fbed7..9f58e81b76d1711e32d0143e4889a1ac62f4e449 100644
--- a/src/plugins/debugger/registerhandler.h
+++ b/src/plugins/debugger/registerhandler.h
@@ -54,7 +54,7 @@ public:
      * base=0 to QString::toULongLong() should work (C-language conventions).
      * Values that cannot be converted (such as 128bit MMX-registers) are
      * passed through. */
-    QString value;
+    QByteArray value;
     int type;
     bool changed;
 };