From e3712f96874358dbd97be11a5b80a9a3c07c6747 Mon Sep 17 00:00:00 2001
From: hjk <qtc-committer@nokia.com>
Date: Tue, 5 Jan 2010 16:51:55 +0100
Subject: [PATCH] debugger: refactoring, use QByteArray instead of QString when
 appropriate

---
 src/plugins/debugger/breakhandler.cpp         |  14 +-
 src/plugins/debugger/breakhandler.h           |  36 +-
 src/plugins/debugger/cdb/cdbassembler.cpp     |   2 +-
 src/plugins/debugger/cdb/cdbbreakpoint.cpp    |   2 +-
 src/plugins/debugger/cdb/cdbdebugengine.cpp   |   4 +-
 .../debugger/cdb/cdbstackframecontext.cpp     |   2 +-
 .../debugger/cdb/cdbsymbolgroupcontext.cpp    |   6 +-
 .../debugger/cdb/cdbsymbolgroupcontext_tpl.h  |   2 +-
 src/plugins/debugger/gdb/attachgdbadapter.cpp |   2 +-
 src/plugins/debugger/gdb/coregdbadapter.cpp   |  11 +-
 src/plugins/debugger/gdb/gdbengine.cpp        | 633 +++++++++---------
 src/plugins/debugger/gdb/gdbengine.h          |  12 +-
 src/plugins/debugger/gdb/plaingdbadapter.cpp  |  16 +-
 src/plugins/debugger/gdb/remotegdbadapter.cpp |  29 +-
 src/plugins/debugger/gdb/termgdbadapter.cpp   |   5 +-
 src/plugins/debugger/gdb/trkgdbadapter.cpp    |  12 +-
 src/plugins/debugger/registerhandler.h        |   4 +-
 src/plugins/debugger/script/scriptengine.cpp  |   8 +-
 src/plugins/debugger/watchhandler.cpp         |  59 +-
 src/plugins/debugger/watchhandler.h           |  42 +-
 src/plugins/debugger/watchutils.cpp           |  65 +-
 src/plugins/debugger/watchutils.h             |   3 +-
 22 files changed, 498 insertions(+), 471 deletions(-)

diff --git a/src/plugins/debugger/breakhandler.cpp b/src/plugins/debugger/breakhandler.cpp
index b207360bd72..b77c26d9f83 100644
--- a/src/plugins/debugger/breakhandler.cpp
+++ b/src/plugins/debugger/breakhandler.cpp
@@ -139,7 +139,7 @@ public:
                 }
             }
         }
-        m_data->lineNumber = QString::number(lineNumber);
+        m_data->lineNumber = QByteArray::number(lineNumber);
         m_data->handler()->updateMarkers();
     }
 
@@ -386,13 +386,13 @@ void BreakHandler::loadBreakpoints()
             data->fileName = v.toString();
         v = map.value(QLatin1String("linenumber"));
         if (v.isValid())
-            data->lineNumber = v.toString();
+            data->lineNumber = v.toString().toLatin1();
         v = map.value(QLatin1String("condition"));
         if (v.isValid())
-            data->condition = v.toString();
+            data->condition = v.toString().toLatin1();
         v = map.value(QLatin1String("ignorecount"));
         if (v.isValid())
-            data->ignoreCount = v.toInt();
+            data->ignoreCount = v.toString().toLatin1();
         v = map.value(QLatin1String("funcname"));
         if (v.isValid())
             data->funcName = v.toString();
@@ -561,7 +561,7 @@ bool BreakHandler::setData(const QModelIndex &mi, const QVariant &value, int rol
         case 4: {
             QString val = value.toString();
             if (val != data->condition) {
-                data->condition = val;
+                data->condition = val.toLatin1();
                 dataChanged(mi, mi);
             }
             return true;
@@ -569,7 +569,7 @@ bool BreakHandler::setData(const QModelIndex &mi, const QVariant &value, int rol
         case 5: {
             QString val = value.toString();
             if (val != data->ignoreCount) {
-                data->ignoreCount = val;
+                data->ignoreCount = val.toLatin1();
                 dataChanged(mi, mi);
             }
             return true;
@@ -660,7 +660,7 @@ void BreakHandler::setBreakpoint(const QString &fileName, int lineNumber)
 
     BreakpointData *data = new BreakpointData(this);
     data->fileName = fileName;
-    data->lineNumber = QString::number(lineNumber);
+    data->lineNumber = QByteArray::number(lineNumber);
     data->pending = true;
     data->markerFileName = fileName;
     data->markerLineNumber = lineNumber;
diff --git a/src/plugins/debugger/breakhandler.h b/src/plugins/debugger/breakhandler.h
index 75058ffc640..7127c4180ae 100644
--- a/src/plugins/debugger/breakhandler.h
+++ b/src/plugins/debugger/breakhandler.h
@@ -69,30 +69,30 @@ private:
     BreakpointData(const BreakpointData &);
 
     // Our owner
-    BreakHandler *m_handler;  // not owned.
+    BreakHandler *m_handler; // not owned.
 
 public:
-    bool enabled;           // should we talk to the debugger engine?
-    bool pending;           // does the debugger engine know about us already?
+    bool enabled;            // should we talk to the debugger engine?
+    bool pending;            // does the debugger engine know about us already?
 
     // this "user requested information". will get stored in the session
-    QString fileName;       // short name of source file
-    QString condition;      // condition associated with breakpoint
-    QString ignoreCount;    // ignore count associated with breakpoint
-    QString lineNumber;     // line in source file
-    QString funcName;       // name of containing function
-    bool useFullPath;       // should we use the full path when setting the bp?
+    QString fileName;        // short name of source file
+    QByteArray condition;    // condition associated with breakpoint
+    QByteArray ignoreCount;  // ignore count associated with breakpoint
+    QByteArray lineNumber;   // line in source file
+    QString funcName;        // name of containing function
+    bool useFullPath;        // should we use the full path when setting the bp?
 
     // this is what gdb produced in response
-    QString bpNumber;       // breakpoint number assigned by the debugger engine
-    QString bpCondition;    // condition acknowledged by the debugger engine
-    QString bpIgnoreCount;  // ignore count acknowledged by the debugger engine
-    QString bpFileName;     // file name acknowledged by the debugger engine
-    QString bpLineNumber;   // line number acknowledged by the debugger engine
-    QString bpFuncName;     // function name acknowledged by the debugger engine
-    QString bpAddress;      // address acknowledged by the debugger engine
-    bool    bpMultiple;     // happens in constructors/gdb
-    bool    bpEnabled;      // enable/disable command sent
+    QByteArray bpNumber;     // breakpoint number assigned by the debugger engine
+    QByteArray bpCondition;  // condition acknowledged by the debugger engine
+    QByteArray bpIgnoreCount;// ignore count acknowledged by the debugger engine
+    QString bpFileName;      // file name acknowledged by the debugger engine
+    QByteArray bpLineNumber; // line number acknowledged by the debugger engine
+    QString bpFuncName;      // function name acknowledged by the debugger engine
+    QString bpAddress;       // address acknowledged by the debugger engine
+    bool    bpMultiple;      // happens in constructors/gdb
+    bool    bpEnabled;       // enable/disable command sent
 
     // taken from either user input or gdb responses
     QString markerFileName; // used to locate the marker
diff --git a/src/plugins/debugger/cdb/cdbassembler.cpp b/src/plugins/debugger/cdb/cdbassembler.cpp
index 1e27cf53f32..43d698ab627 100644
--- a/src/plugins/debugger/cdb/cdbassembler.cpp
+++ b/src/plugins/debugger/cdb/cdbassembler.cpp
@@ -84,7 +84,7 @@ bool getRegisters(CIDebugControl *ctl,
             return false;
         }
         Register reg;
-        reg.name = QString::fromUtf16(reinterpret_cast<const ushort *>(wszBuf));
+        reg.name = QString::fromUtf16(reinterpret_cast<const ushort *>(wszBuf)).toLatin1();
         registers->push_back(reg);
     }
     // get values
diff --git a/src/plugins/debugger/cdb/cdbbreakpoint.cpp b/src/plugins/debugger/cdb/cdbbreakpoint.cpp
index 4393c6a3612..9ec69d3be35 100644
--- a/src/plugins/debugger/cdb/cdbbreakpoint.cpp
+++ b/src/plugins/debugger/cdb/cdbbreakpoint.cpp
@@ -564,7 +564,7 @@ bool CDBBreakPoint::synchronizeBreakPoints(CIDebugControl* debugControl,
                 handler->takeInsertedBreakPoint(nbd);
                 updateMarkers = true;
                 nbd->pending = false;
-                nbd->bpNumber = QString::number(id);
+                nbd->bpNumber = QByteArray::number(uint(id));
                 nbd->bpAddress = QLatin1String("0x") + QString::number(address, 16);
                 // Take over rest as is
                 nbd->bpCondition = nbd->condition;
diff --git a/src/plugins/debugger/cdb/cdbdebugengine.cpp b/src/plugins/debugger/cdb/cdbdebugengine.cpp
index 54041804045..fc4d0136fb5 100644
--- a/src/plugins/debugger/cdb/cdbdebugengine.cpp
+++ b/src/plugins/debugger/cdb/cdbdebugengine.cpp
@@ -985,7 +985,7 @@ void CdbDebugEngine::updateWatchData(const WatchData &incomplete)
         qDebug() << Q_FUNC_INFO << "\n    " << incomplete.toString();
 
     WatchHandler *watchHandler = manager()->watchHandler();
-    if (incomplete.iname.startsWith(QLatin1String("watch."))) {
+    if (incomplete.iname.startsWith("watch.")) {
         WatchData watchData = incomplete;
         evaluateWatcher(&watchData);
         watchHandler->insertData(watchData);
@@ -1311,7 +1311,7 @@ void CdbDebugEngine::assignValueInDebugger(const QString &expr, const QString &v
             break;
         // Update view
         WatchHandler *watchHandler = manager()->watchHandler();
-        if (WatchData *fwd = watchHandler->findItem(expr)) {
+        if (WatchData *fwd = watchHandler->findItem(expr.toLatin1())) {
             fwd->setValue(newValue);
             watchHandler->insertData(*fwd);
             watchHandler->updateWatchers();
diff --git a/src/plugins/debugger/cdb/cdbstackframecontext.cpp b/src/plugins/debugger/cdb/cdbstackframecontext.cpp
index f64f0366a1d..46e6aadefcb 100644
--- a/src/plugins/debugger/cdb/cdbstackframecontext.cpp
+++ b/src/plugins/debugger/cdb/cdbstackframecontext.cpp
@@ -230,7 +230,7 @@ bool WatchHandleDumperInserter::expandPointerToDumpable(const WatchData &wd, QSt
         derefedWd.setType(type);
         derefedWd.setAddress(hexAddrS);
         derefedWd.name = QString(QLatin1Char('*'));
-        derefedWd.iname = wd.iname + QLatin1String(".*");
+        derefedWd.iname = wd.iname + ".*";
         derefedWd.source = OwnerDumper | CdbStackFrameContext::ChildrenKnownBit;
         const CdbDumperHelper::DumpResult dr = m_dumper->dumpType(derefedWd, true, &m_dumperResult, errorMessage);
         if (dr != CdbDumperHelper::DumpOk)
diff --git a/src/plugins/debugger/cdb/cdbsymbolgroupcontext.cpp b/src/plugins/debugger/cdb/cdbsymbolgroupcontext.cpp
index b37c8218890..4466cac0daf 100644
--- a/src/plugins/debugger/cdb/cdbsymbolgroupcontext.cpp
+++ b/src/plugins/debugger/cdb/cdbsymbolgroupcontext.cpp
@@ -470,11 +470,11 @@ static inline QString fixValue(const QString &value, const QString &type)
 WatchData CdbSymbolGroupContext::watchDataAt(unsigned long index) const
 {
     WatchData wd;
-    wd.iname = symbolINameAt(index);
+    wd.iname = symbolINameAt(index).toLatin1();
     wd.exp = wd.iname;
     // Determine name from iname and format shadowed variables correctly
     // as "<shadowed X>, see populateINameIndexMap().
-    const int lastDelimiterPos = wd.iname.lastIndexOf(m_nameDelimiter);
+    const int lastDelimiterPos = wd.iname.lastIndexOf(m_nameDelimiter.toLatin1());
     QString name = lastDelimiterPos == -1 ? wd.iname : wd.iname.mid(lastDelimiterPos + 1);
     int shadowedNumber = 0;
     const int shadowedPos = name.lastIndexOf(QLatin1Char(iNameShadowDelimiter));
@@ -486,7 +486,7 @@ WatchData CdbSymbolGroupContext::watchDataAt(unsigned long index) const
     // (std::map extends std::tree<>... Remove them for display only.
     const QString fullShadowedName = WatchData::shadowedName(name, shadowedNumber);
     wd.name = WatchData::shadowedName(removeInnerTemplateType(name), shadowedNumber);
-    wd.addr = hexSymbolOffset(m_symbolGroup, index);
+    wd.addr = hexSymbolOffset(m_symbolGroup, index).toLatin1();
     const QString type = getSymbolString(m_symbolGroup, &IDebugSymbolGroup2::GetSymbolTypeNameWide, index);    
     wd.setType(type);    
     // Check for unitialized variables at level 0 only.
diff --git a/src/plugins/debugger/cdb/cdbsymbolgroupcontext_tpl.h b/src/plugins/debugger/cdb/cdbsymbolgroupcontext_tpl.h
index fe33e802b6c..0ae6be3353e 100644
--- a/src/plugins/debugger/cdb/cdbsymbolgroupcontext_tpl.h
+++ b/src/plugins/debugger/cdb/cdbsymbolgroupcontext_tpl.h
@@ -137,7 +137,7 @@ bool insertSymbolRecursion(WatchData wd,
                 return false;
         }  else {
             const QString msg = QString::fromLatin1("WARNING: Skipping invalid child symbol #%2 (type %3) of '%4'.").
-                                arg(QLatin1String(Q_FUNC_INFO)).arg(c).arg(cwd.type, wd.iname);
+                                arg(QLatin1String(Q_FUNC_INFO)).arg(c).arg(cwd.type, QString::fromLatin1(wd.iname));
             qWarning("%s\n", qPrintable(msg));
         }
     }
diff --git a/src/plugins/debugger/gdb/attachgdbadapter.cpp b/src/plugins/debugger/gdb/attachgdbadapter.cpp
index 2810ef23d97..d4f7c869f43 100644
--- a/src/plugins/debugger/gdb/attachgdbadapter.cpp
+++ b/src/plugins/debugger/gdb/attachgdbadapter.cpp
@@ -70,7 +70,7 @@ void AttachGdbAdapter::startInferior()
 {
     QTC_ASSERT(state() == InferiorStarting, qDebug() << state());
     const qint64 pid = startParameters().attachPID;
-    m_engine->postCommand(_("attach %1").arg(pid), CB(handleAttach));
+    m_engine->postCommand("attach " + QByteArray::number(pid), CB(handleAttach));
     // Task 254674 does not want to remove them
     //qq->breakHandler()->removeAllBreakpoints();
 }
diff --git a/src/plugins/debugger/gdb/coregdbadapter.cpp b/src/plugins/debugger/gdb/coregdbadapter.cpp
index e64abf9af31..9e2556649b2 100644
--- a/src/plugins/debugger/gdb/coregdbadapter.cpp
+++ b/src/plugins/debugger/gdb/coregdbadapter.cpp
@@ -97,8 +97,9 @@ void CoreGdbAdapter::loadExeAndSyms()
 {
     // Do that first, otherwise no symbols are loaded.
     QFileInfo fi(m_executable);
-    m_engine->postCommand(_("-file-exec-and-symbols \"%1\"")
-        .arg(fi.absoluteFilePath()), CB(handleFileExecAndSymbols));
+    QByteArray path = fi.absoluteFilePath().toLocal8Bit();
+    m_engine->postCommand("-file-exec-and-symbols \"" + path + '"',
+         CB(handleFileExecAndSymbols));
 }
 
 void CoreGdbAdapter::handleFileExecAndSymbols(const GdbResponse &response)
@@ -118,8 +119,8 @@ void CoreGdbAdapter::loadCoreFile()
 {
     // Quoting core name below fails in gdb 6.8-debian.
     QFileInfo fi(startParameters().coreFile);
-    QString coreName = fi.absoluteFilePath();
-    m_engine->postCommand(_("target core ") + coreName, CB(handleTargetCore));
+    QByteArray coreName = fi.absoluteFilePath().toLocal8Bit();
+    m_engine->postCommand("target core " + coreName, CB(handleTargetCore));
 }
 
 void CoreGdbAdapter::handleTargetCore(const GdbResponse &response)
@@ -144,7 +145,7 @@ void CoreGdbAdapter::handleTargetCore(const GdbResponse &response)
                     if (QFile::exists(m_executable)) {
                         // Finish extra round ...
                         showStatusMessage(tr("Attached to core temporarily."));
-                        m_engine->postCommand(_("detach"));
+                        m_engine->postCommand("detach");
                         // ... and retry.
                         loadExeAndSyms();
                         return;
diff --git a/src/plugins/debugger/gdb/gdbengine.cpp b/src/plugins/debugger/gdb/gdbengine.cpp
index 93eaa08a7d7..9ee2f673109 100644
--- a/src/plugins/debugger/gdb/gdbengine.cpp
+++ b/src/plugins/debugger/gdb/gdbengine.cpp
@@ -139,6 +139,12 @@ static int &currentToken()
     return token;
 }
 
+static bool isAccessSpecifier(const QByteArray &ba)
+{
+    return ba == "private" || ba == "protected" || ba == "public";
+}
+
+
 // reads a MI-encoded item frome the consolestream
 static bool parseConsoleStream(const GdbResponse &response, GdbMi *contents)
 {
@@ -688,13 +694,13 @@ void GdbEngine::maybeHandleInferiorPidChanged(const QString &pid0)
         tryLoadDebuggingHelpers();
 }
 
-void GdbEngine::postCommand(const QString &command, AdapterCallback callback,
+void GdbEngine::postCommand(const QByteArray &command, AdapterCallback callback,
                             const char *callbackName, const QVariant &cookie)
 {
     postCommand(command, NoFlags, callback, callbackName, cookie);
 }
 
-void GdbEngine::postCommand(const QString &command, GdbCommandFlags flags,
+void GdbEngine::postCommand(const QByteArray &command, GdbCommandFlags flags,
                             AdapterCallback callback,
                             const char *callbackName, const QVariant &cookie)
 {
@@ -707,13 +713,13 @@ void GdbEngine::postCommand(const QString &command, GdbCommandFlags flags,
     postCommandHelper(cmd);
 }
 
-void GdbEngine::postCommand(const QString &command, GdbCommandCallback callback,
+void GdbEngine::postCommand(const QByteArray &command, GdbCommandCallback callback,
                             const char *callbackName, const QVariant &cookie)
 {
     postCommand(command, NoFlags, callback, callbackName, cookie);
 }
 
-void GdbEngine::postCommand(const QString &command, GdbCommandFlags flags,
+void GdbEngine::postCommand(const QByteArray &command, GdbCommandFlags flags,
                             GdbCommandCallback callback, const char *callbackName,
                             const QVariant &cookie)
 {
@@ -731,7 +737,7 @@ void GdbEngine::postCommandHelper(const GdbCommand &cmd)
     if (!stateAcceptsGdbCommands(state())) {
         PENDING_DEBUG(_("NO GDB PROCESS RUNNING, CMD IGNORED: ") + cmd.command);
         debugMessage(_("NO GDB PROCESS RUNNING, CMD IGNORED: %1 %2")
-            .arg(cmd.command).arg(state()));
+            .arg(_(cmd.command)).arg(state()));
         return;
     }
 
@@ -751,7 +757,7 @@ void GdbEngine::postCommandHelper(const GdbCommand &cmd)
             flushCommand(cmd);
         } else {
             // Queue the commands that we cannot send at once.
-            debugMessage(_("QUEUING COMMAND ") + cmd.command);
+            debugMessage(_("QUEUING COMMAND " + cmd.command));
             m_commandsToRunOnTemporaryBreak.append(cmd);
             if (state() == InferiorStopping) {
                 if (cmd.flags & LosesChild)
@@ -782,8 +788,8 @@ void GdbEngine::flushQueuedCommands()
     showStatusMessage(tr("Processing queued commands."), 1000);
     while (!m_commandsToRunOnTemporaryBreak.isEmpty()) {
         GdbCommand cmd = m_commandsToRunOnTemporaryBreak.takeFirst();
-        debugMessage(_("RUNNING QUEUED COMMAND %1 %2")
-            .arg(cmd.command).arg(_(cmd.callbackName)));
+        debugMessage(_("RUNNING QUEUED COMMAND " + cmd.command + ' '
+            + cmd.callbackName));
         flushCommand(cmd);
     }
 }
@@ -792,18 +798,18 @@ void GdbEngine::flushCommand(const GdbCommand &cmd0)
 {
     GdbCommand cmd = cmd0;
     if (state() == DebuggerNotReady) {
-        gdbInputAvailable(LogInput, cmd.command);
-        debugMessage(_("GDB PROCESS NOT RUNNING, PLAIN CMD IGNORED: ") + cmd.command);
+        gdbInputAvailable(LogInput, _(cmd.command));
+        debugMessage(_("GDB PROCESS NOT RUNNING, PLAIN CMD IGNORED: " + cmd.command));
         return;
     }
 
     ++currentToken();
     cmd.postTime = QTime::currentTime();
     m_cookieForToken[currentToken()] = cmd;
-    cmd.command = QString::number(currentToken()) + cmd.command;
-    gdbInputAvailable(LogInput, cmd.command);
+    cmd.command = QByteArray::number(currentToken()) + cmd.command;
+    gdbInputAvailable(LogInput, _(cmd.command));
 
-    m_gdbAdapter->write(cmd.command.toLatin1() + "\r\n");
+    m_gdbAdapter->write(cmd.command + "\r\n");
 
     m_commandTimer->start();
 
@@ -827,7 +833,7 @@ void GdbEngine::commandTimeout()
         const GdbCommand &cmd = m_cookieForToken.value(key);
         if (!(cmd.flags & NonCriticalResponse))
             killIt = true;
-        debugMessage(_("  %1: %2 => %3").arg(key).arg(cmd.command).arg(_(cmd.callbackName)));
+        debugMessage(_("  %1: %2 => %3").arg(key).arg(_(cmd.command)).arg(_(cmd.callbackName)));
     }
     if (killIt) {
         debugMessage(_("TIMED OUT WAITING FOR GDB REPLY. COMMANDS STILL IN PROGRESS:"));
@@ -922,7 +928,7 @@ void GdbEngine::handleResultRecord(GdbResponse *response)
     GdbCommand cmd = m_cookieForToken.take(token);
     if (theDebuggerBoolSetting(LogTimeStamps)) {
         gdbOutputAvailable(LogTime, _("Response time: %1: %2 s")
-            .arg(cmd.command)
+            .arg(_(cmd.command))
             .arg(cmd.postTime.msecsTo(QTime::currentTime()) / 1000.));
     }
 
@@ -937,9 +943,10 @@ void GdbEngine::handleResultRecord(GdbResponse *response)
         response->resultClass != ((cmd.flags & RunRequest) ? GdbResultRunning :
                                   (cmd.flags & ExitRequest) ? GdbResultExit :
                                   GdbResultDone)) {
-        QString rsp = _(GdbResponse::stringFromResultClass(response->resultClass));
-        qWarning() << "UNEXPECTED RESPONSE " << rsp << " TO COMMAND" << cmd.command << " AT " __FILE__ ":" STRINGIFY(__LINE__);
-        debugMessage(_("UNEXPECTED RESPONSE %1 TO COMMAND %2").arg(rsp).arg(cmd.command));
+        QByteArray rsp = GdbResponse::stringFromResultClass(response->resultClass);
+        rsp = "UNEXPECTED RESPONSE " + rsp + " TO COMMAND" + cmd.command;
+        qWarning() << rsp << " AT " __FILE__ ":" STRINGIFY(__LINE__);
+        debugMessage(_(rsp));
     } else {
         if (cmd.callback)
             (this->*cmd.callback)(*response);
@@ -1002,11 +1009,11 @@ void GdbEngine::updateAll()
     QTC_ASSERT(state() == InferiorUnrunnable || state() == InferiorStopped, /**/);
     tryLoadDebuggingHelpers();
     reloadModulesInternal();
-    postCommand(_("-stack-list-frames"), WatchUpdate, CB(handleStackListFrames),
+    postCommand("-stack-list-frames", WatchUpdate, CB(handleStackListFrames),
         QVariant::fromValue<StackCookie>(StackCookie(false, true)));
     manager()->stackHandler()->setCurrentIndex(0);
     if (supportsThreads())
-        postCommand(_("-thread-list-ids"), WatchUpdate, CB(handleStackListThreads), 0);
+        postCommand("-thread-list-ids", WatchUpdate, CB(handleStackListThreads), 0);
     manager()->reloadRegisters();
     updateLocals(); 
 }
@@ -1092,7 +1099,7 @@ void GdbEngine::handleAqcuiredInferior()
 {
     // Reverse debugging. FIXME: Should only be used when available.
     //if (theDebuggerBoolSetting(EnableReverseDebugging))
-    //    postCommand(_("target response"));
+    //    postCommand("target response");
 
     tryLoadDebuggingHelpers();
 
@@ -1100,19 +1107,19 @@ void GdbEngine::handleAqcuiredInferior()
     // intentionally after tryLoadDebuggingHelpers(),
     // otherwise we'd interupt solib loading.
     if (theDebuggerBoolSetting(AllPluginBreakpoints)) {
-        postCommand(_("set auto-solib-add on"));
-        postCommand(_("set stop-on-solib-events 0"));
-        postCommand(_("sharedlibrary .*"));
+        postCommand("set auto-solib-add on");
+        postCommand("set stop-on-solib-events 0");
+        postCommand("sharedlibrary .*");
     } else if (theDebuggerBoolSetting(SelectedPluginBreakpoints)) {
-        postCommand(_("set auto-solib-add on"));
-        postCommand(_("set stop-on-solib-events 1"));
-        postCommand(_("sharedlibrary ")
+        postCommand("set auto-solib-add on");
+        postCommand("set stop-on-solib-events 1");
+        postCommand("sharedlibrary "
           + theDebuggerStringSetting(SelectedPluginBreakpointsPattern));
     } else if (theDebuggerBoolSetting(NoPluginBreakpoints)) {
         // should be like that already
         if (!m_dumperInjectionLoad)
-            postCommand(_("set auto-solib-add off"));
-        postCommand(_("set stop-on-solib-events 0"));
+            postCommand("set auto-solib-add off");
+        postCommand("set stop-on-solib-events 0");
     }
     #endif
 
@@ -1199,7 +1206,7 @@ void GdbEngine::handleStopResponse(const GdbMi &data)
             invalidateSourcesList();
             // Each stop causes a roundtrip and button flicker, so prevent
             // a flood of useless stops. Will be automatically re-enabled.
-            postCommand(_("set stop-on-solib-events 0"));
+            postCommand("set stop-on-solib-events 0");
 #if 0
             // The related code (handleAqcuiredInferior()) is disabled as well.
             if (theDebuggerBoolSetting(SelectedPluginBreakpoints)) {
@@ -1207,7 +1214,7 @@ void GdbEngine::handleStopResponse(const GdbMi &data)
                 debugMessage(_("SHARED LIBRARY EVENT: ") + dataStr);
                 QString pat = theDebuggerStringSetting(SelectedPluginBreakpointsPattern);
                 debugMessage(_("PATTERN: ") + pat);
-                postCommand(_("sharedlibrary ") + pat);
+                postCommand("sharedlibrary " + pat.toLocal8Bit());
                 showStatusMessage(tr("Loading %1...").arg(dataStr));
             }
 #endif
@@ -1230,7 +1237,7 @@ void GdbEngine::handleStopResponse(const GdbMi &data)
             // The case of the user really setting a breakpoint at _start is simply
             // unsupported.
             if (!inferiorPid()) // For programs without -pthread under gdb <= 6.8.
-                postCommand(_("info proc"), CB(handleInfoProc));
+                postCommand("info proc", CB(handleInfoProc));
             continueInferiorInternal();
             return;
         }
@@ -1300,7 +1307,7 @@ void GdbEngine::handleStopResponse(const GdbMi &data)
     if (initHelpers) {
         tryLoadDebuggingHelpers();
         QVariant var = QVariant::fromValue<GdbMi>(data);
-        postCommand(_("p 4"), CB(handleStop1), var);  // dummy
+        postCommand("p 4", CB(handleStop1), var);  // dummy
     } else {
         handleStop1(data);
     }
@@ -1381,7 +1388,7 @@ void GdbEngine::handleStop1(const GdbMi &data)
 
     if (supportsThreads()) {
         int currentId = data.findChild("thread-id").data().toInt();
-        postCommand(_("-thread-list-ids"), WatchUpdate,
+        postCommand("-thread-list-ids", WatchUpdate,
             CB(handleStackListThreads), currentId);
     }
 
@@ -1526,7 +1533,7 @@ void GdbEngine::shutdown()
     case AdapterStartFailed: // Adapter "did something", but it did not help
         if (m_gdbProc.state() == QProcess::Running) {
             m_commandsToRunOnTemporaryBreak.clear();
-            postCommand(_("-gdb-exit"), GdbEngine::ExitRequest, CB(handleGdbExit));
+            postCommand("-gdb-exit", GdbEngine::ExitRequest, CB(handleGdbExit));
         } else {
             setState(DebuggerNotReady);
         }
@@ -1536,7 +1543,7 @@ void GdbEngine::shutdown()
     case InferiorStopping:
     case InferiorStopped:
         m_commandsToRunOnTemporaryBreak.clear();
-        postCommand(_(m_gdbAdapter->inferiorShutdownCommand()),
+        postCommand(m_gdbAdapter->inferiorShutdownCommand(),
                     NeedsStop | LosesChild, CB(handleInferiorShutdown));
         break;
     case AdapterStarted: // We can't get here, really
@@ -1545,7 +1552,7 @@ void GdbEngine::shutdown()
     case InferiorShutdownFailed: // Whatever
     case InferiorUnrunnable:
         m_commandsToRunOnTemporaryBreak.clear();
-        postCommand(_("-gdb-exit"), GdbEngine::ExitRequest, CB(handleGdbExit));
+        postCommand("-gdb-exit", GdbEngine::ExitRequest, CB(handleGdbExit));
         setState(EngineShuttingDown); // Do it after posting the command!
         break;
     case InferiorStarting: // This may take some time, so just short-circuit it
@@ -1592,7 +1599,7 @@ void GdbEngine::detachDebugger()
 {
     QTC_ASSERT(state() == InferiorStopped, /**/);
     QTC_ASSERT(startMode() != AttachCore, /**/);
-    postCommand(_("detach")); 
+    postCommand("detach");
     setState(InferiorShuttingDown);
     setState(InferiorShutDown);
     shutdown();
@@ -1683,7 +1690,7 @@ void GdbEngine::continueInferiorInternal()
     QTC_ASSERT(state() == InferiorStopped || state() == InferiorStarting,
                qDebug() << state());
     setState(InferiorRunningRequested);
-    postCommand(_("-exec-continue"), RunRequest, CB(handleExecContinue));
+    postCommand("-exec-continue", RunRequest, CB(handleExecContinue));
 }
 
 void GdbEngine::autoContinueInferior()
@@ -1707,9 +1714,9 @@ void GdbEngine::stepExec()
     setState(InferiorRunningRequested);
     showStatusMessage(tr("Step requested..."), 5000);
     if (manager()->isReverseDebugging())
-        postCommand(_("-reverse-step"), RunRequest, CB(handleExecContinue));
+        postCommand("-reverse-step", RunRequest, CB(handleExecContinue));
     else
-        postCommand(_("-exec-step"), RunRequest, CB(handleExecContinue));
+        postCommand("-exec-step", RunRequest, CB(handleExecContinue));
 }
 
 void GdbEngine::stepIExec()
@@ -1719,9 +1726,9 @@ void GdbEngine::stepIExec()
     setState(InferiorRunningRequested);
     showStatusMessage(tr("Step by instruction requested..."), 5000);
     if (manager()->isReverseDebugging())
-        postCommand(_("-reverse-stepi"), RunRequest, CB(handleExecContinue));
+        postCommand("-reverse-stepi", RunRequest, CB(handleExecContinue));
     else
-        postCommand(_("-exec-step-instruction"), RunRequest, CB(handleExecContinue));
+        postCommand("-exec-step-instruction", RunRequest, CB(handleExecContinue));
 }
 
 void GdbEngine::stepOutExec()
@@ -1730,7 +1737,7 @@ void GdbEngine::stepOutExec()
     setTokenBarrier();
     setState(InferiorRunningRequested);
     showStatusMessage(tr("Finish function requested..."), 5000);
-    postCommand(_("-exec-finish"), RunRequest, CB(handleExecContinue));
+    postCommand("-exec-finish", RunRequest, CB(handleExecContinue));
 }
 
 void GdbEngine::nextExec()
@@ -1740,15 +1747,9 @@ void GdbEngine::nextExec()
     setState(InferiorRunningRequested);
     showStatusMessage(tr("Step next requested..."), 5000);
     if (manager()->isReverseDebugging())
-        postCommand(_("-reverse-next"), RunRequest, CB(handleExecContinue));
-    else {
-#if 1
-        postCommand(_("-exec-next"), RunRequest, CB(handleExecContinue));
-#else
-        postCommand(_("tbreak \"%2\":%1").arg(lastLine + 1).arg(breakLocation(lastFile)));
-        postCommand(_("-exec-continue"), RunRequest, CB(handleExecContinue));
-#endif
-    }
+        postCommand("-reverse-next", RunRequest, CB(handleExecContinue));
+    else
+        postCommand("-exec-next", RunRequest, CB(handleExecContinue));
 }
 
 void GdbEngine::nextIExec()
@@ -1758,9 +1759,9 @@ void GdbEngine::nextIExec()
     setState(InferiorRunningRequested);
     showStatusMessage(tr("Step next instruction requested..."), 5000);
     if (manager()->isReverseDebugging())
-        postCommand(_("-reverse-nexti"), RunRequest, CB(handleExecContinue));
+        postCommand("-reverse-nexti", RunRequest, CB(handleExecContinue));
     else
-        postCommand(_("-exec-next-instruction"), RunRequest, CB(handleExecContinue));
+        postCommand("-exec-next-instruction", RunRequest, CB(handleExecContinue));
 }
 
 void GdbEngine::runToLineExec(const QString &fileName, int lineNumber)
@@ -1769,18 +1770,19 @@ void GdbEngine::runToLineExec(const QString &fileName, int lineNumber)
     setTokenBarrier();
     setState(InferiorRunningRequested);
     showStatusMessage(tr("Run to line %1 requested...").arg(lineNumber), 5000);
-    postCommand(_("-exec-until \"%2\":%1").arg(lineNumber).arg(breakLocation(fileName)),
-                RunRequest, CB(handleExecContinue));
+    QByteArray args = '"' + breakLocation(fileName).toLocal8Bit() + '"' + ':'
+        + QByteArray::number(lineNumber);
+    postCommand("-exec-until " + args, RunRequest, CB(handleExecContinue));
 }
 
 void GdbEngine::runToFunctionExec(const QString &functionName)
 {
     QTC_ASSERT(state() == InferiorStopped, qDebug() << state());
     setTokenBarrier();
-    postCommand(_("-break-insert -t ") + functionName);
+    postCommand("-break-insert -t " + functionName.toLatin1());
     continueInferiorInternal();
     //setState(InferiorRunningRequested);
-    //postCommand(_("-exec-continue"), handleExecRunToFunction);
+    //postCommand("-exec-continue", handleExecRunToFunction);
     showStatusMessage(tr("Run to function %1 requested...").arg(functionName), 5000);
 }
 
@@ -1791,10 +1793,11 @@ void GdbEngine::jumpToLineExec(const QString &fileName, int lineNumber)
     frame.file = fileName;
     frame.line = lineNumber;
 #if 1
-    QString loc = breakLocation(fileName);
-    postCommand(_("tbreak \"%2\":%1").arg(lineNumber).arg(loc));
+    QByteArray loc = '"' + breakLocation(fileName).toLocal8Bit() + '"' + ':'
+        + QByteArray::number(lineNumber);
+    postCommand("tbreak " + loc);
     setState(InferiorRunningRequested);
-    postCommand(_("jump \"%2\":%1").arg(lineNumber).arg(loc), RunRequest);
+    postCommand("jump " + loc, RunRequest);
     // will produce something like
     //  &"jump \"/home/apoenitz/dev/work/test1/test1.cpp\":242"
     //  ~"Continuing at 0x4058f3."
@@ -1803,12 +1806,12 @@ void GdbEngine::jumpToLineExec(const QString &fileName, int lineNumber)
     //  23^done"
     gotoLocation(frame, true);
     //setBreakpoint();
-    //postCommand(_("jump ") + fileName + ':' + QString::number(lineNumber));
+    //postCommand("jump " + loc);
 #else
     gotoLocation(frame,  true);
     setBreakpoint(fileName, lineNumber);
     setState(InferiorRunningRequested);
-    postCommand(_("jump ") + fileName + ':' + QString::number(lineNumber), RunRequest);
+    postCommand("jump " + loc, RunRequest);
 #endif
 }
 
@@ -1839,12 +1842,12 @@ void GdbEngine::setDebugDebuggingHelpers(const QVariant &on)
 {
     if (on.toBool()) {
         debugMessage(_("SWITCHING ON DUMPER DEBUGGING"));
-        postCommand(_("set unwindonsignal off"));
+        postCommand("set unwindonsignal off");
         m_manager->breakByFunction(_("qDumpObjectData440"));
         //updateLocals();
     } else {
         debugMessage(_("SWITCHING OFF DUMPER DEBUGGING"));
-        postCommand(_("set unwindonsignal on"));
+        postCommand("set unwindonsignal on");
     }
 }
 
@@ -1868,7 +1871,7 @@ void GdbEngine::breakpointDataFromOutput(BreakpointData *data, const GdbMi &bkpt
     QByteArray file, fullName;
     foreach (const GdbMi &child, bkpt.children()) {
         if (child.hasName("number")) {
-            data->bpNumber = _(child.data());
+            data->bpNumber = child.data();
         } else if (child.hasName("func")) {
             data->bpFuncName = _(child.data());
         } else if (child.hasName("addr")) {
@@ -1883,11 +1886,11 @@ void GdbEngine::breakpointDataFromOutput(BreakpointData *data, const GdbMi &bkpt
         } else if (child.hasName("fullname")) {
             fullName = child.data();
         } else if (child.hasName("line")) {
-            data->bpLineNumber = _(child.data());
+            data->bpLineNumber = child.data();
             if (child.data().toInt())
                 data->markerLineNumber = child.data().toInt();
         } else if (child.hasName("cond")) {
-            data->bpCondition = _(child.data());
+            data->bpCondition = child.data();
             // gdb 6.3 likes to "rewrite" conditions. Just accept that fact.
             if (data->bpCondition != data->condition && data->conditionsMatch())
                 data->condition = data->bpCondition;
@@ -1936,27 +1939,28 @@ QString GdbEngine::breakLocation(const QString &file) const
 void GdbEngine::sendInsertBreakpoint(int index)
 {
     const BreakpointData *data = manager()->breakHandler()->at(index);
-    QString where;
+    QByteArray where;
     if (data->funcName.isEmpty()) {
-        where = data->useFullPath ? data->fileName : breakLocation(data->fileName);
+        QString loc = data->useFullPath ? data->fileName : breakLocation(data->fileName);
         // The argument is simply a C-quoted version of the argument to the
         // non-MI "break" command, including the "original" quoting it wants.
-        where = _("\"\\\"%2\\\":%1\"").arg(data->lineNumber).arg(GdbMi::escapeCString(where));
+        where = "\"\\\"" + GdbMi::escapeCString(loc).toLocal8Bit() + "\\\":"
+            + data->lineNumber + '"';
     } else {
-        where = data->funcName;
+        where = data->funcName.toLatin1();
     }
 
     // set up fallback in case of pending breakpoints which aren't handled
     // by the MI interface
-    QString cmd;
+    QByteArray cmd;
     if (m_isMacGdb)
-        cmd = _("-break-insert -l -1 -f ");
+        cmd = "-break-insert -l -1 -f ";
     else if (m_gdbVersion >= 60800) // Probably some earlier version would work as well ...
-        cmd = _("-break-insert -f ");
+        cmd = "-break-insert -f ";
     else
-        cmd = _("-break-insert ");
+        cmd = "-break-insert ";
     //if (!data->condition.isEmpty())
-    //    cmd += _("-c ") + data->condition + _c(' ');
+    //    cmd += "-c " + data->condition + ' ';
     cmd += where;
     postCommand(cmd, NeedsStop, CB(handleBreakInsert), index);
 }
@@ -1964,7 +1968,7 @@ void GdbEngine::sendInsertBreakpoint(int index)
 void GdbEngine::reloadBreakListInternal()
 {
     m_breakListUpdating = true; 
-    postCommand(_("-break-list"), NeedsStop, CB(handleBreakList));
+    postCommand("-break-list", NeedsStop, CB(handleBreakList));
 }
 
 void GdbEngine::handleBreakList(const GdbResponse &response)
@@ -2119,7 +2123,7 @@ void GdbEngine::extractDataFromInfoBreak(const QString &output, BreakpointData *
     if (re.indexIn(output) != -1) {
         data->bpAddress = re.cap(1);
         data->bpFuncName = re.cap(2).trimmed();
-        data->bpLineNumber = re.cap(4);
+        data->bpLineNumber = re.cap(4).toLatin1();
         QString full = fullName(re.cap(3));
         if (full.isEmpty()) {
             // FIXME: This happens without UsePreciseBreakpoints regularily.
@@ -2137,7 +2141,7 @@ void GdbEngine::extractDataFromInfoBreak(const QString &output, BreakpointData *
         data->bpFileName = full;
     } else {
         qDebug() << "COULD NOT MATCH " << re.pattern() << " AND " << output;
-        data->bpNumber = _("<unavailable>");
+        data->bpNumber = "<unavailable>";
     }
 }
 
@@ -2169,7 +2173,7 @@ void GdbEngine::handleBreakInsert1(const GdbResponse &response)
     } else {
         qDebug() << "INSERTING BREAKPOINT WITH BASE NAME FAILED. GIVING UP";
         BreakpointData *data = handler->at(index);
-        data->bpNumber = _("<unavailable>");
+        data->bpNumber = "<unavailable>";
     }
     attemptBreakpointSynchronization(); // trigger "ready"
 }
@@ -2208,51 +2212,51 @@ void GdbEngine::attemptBreakpointSynchronization()
     BreakHandler *handler = manager()->breakHandler();
 
     foreach (BreakpointData *data, handler->takeDisabledBreakpoints()) {
-        QString bpNumber = data->bpNumber;
+        QByteArray bpNumber = data->bpNumber;
         if (!bpNumber.trimmed().isEmpty()) {
-            postCommand(_("-break-disable ") + bpNumber, NeedsStop);
+            postCommand("-break-disable " + bpNumber, NeedsStop);
             data->bpEnabled = false;
         }
     }
 
     foreach (BreakpointData *data, handler->takeEnabledBreakpoints()) {
-        QString bpNumber = data->bpNumber;
+        QByteArray bpNumber = data->bpNumber;
         if (!bpNumber.trimmed().isEmpty()) {
-            postCommand(_("-break-enable ") + bpNumber, NeedsStop);
+            postCommand("-break-enable " + bpNumber, NeedsStop);
             data->bpEnabled = true;
         }
     }
 
     foreach (BreakpointData *data, handler->takeRemovedBreakpoints()) {
-        QString bpNumber = data->bpNumber;
-        debugMessage(_("DELETING BP %1 IN %2").arg(bpNumber)
-            .arg(data->markerFileName));
+        QByteArray bpNumber = data->bpNumber;
+        debugMessage(_("DELETING BP " + bpNumber + " IN "
+            + data->markerFileName.toLocal8Bit()));
         if (!bpNumber.trimmed().isEmpty())
-            postCommand(_("-break-delete ") + bpNumber, NeedsStop);
+            postCommand("-break-delete " + bpNumber, NeedsStop);
         delete data;
     }
 
     for (int index = 0; index != handler->size(); ++index) {
         BreakpointData *data = handler->at(index);
         if (data->bpNumber.isEmpty()) { // unset breakpoint?
-            data->bpNumber = _(" "); // Sent, but no feedback yet
+            data->bpNumber = " "; // Sent, but no feedback yet
             sendInsertBreakpoint(index);
         } else if (data->bpNumber.toInt()) {
             if (data->bpMultiple && data->bpFileName.isEmpty()) {
-                postCommand(_("info break %1").arg(data->bpNumber),
+                postCommand("info break " + data->bpNumber,
                     CB(handleBreakInfo), data->bpNumber.toInt());
                 continue;
             }
             // update conditions if needed
             if (data->condition != data->bpCondition && !data->conditionsMatch())
-                postCommand(_("condition %1 %2").arg(data->bpNumber).arg(data->condition),
+                postCommand("condition " + data->bpNumber + ' '  + data->condition,
                             CB(handleBreakCondition), index);
             // update ignorecount if needed
             if (data->ignoreCount != data->bpIgnoreCount)
-                postCommand(_("ignore %1 %2").arg(data->bpNumber).arg(data->ignoreCount),
+                postCommand("ignore " + data->bpNumber + ' ' + data->ignoreCount,
                             CB(handleBreakIgnore), index);
             if (!data->enabled && data->bpEnabled) {
-                postCommand(_("-break-disable ") + data->bpNumber, NeedsStop);
+                postCommand("-break-disable " + data->bpNumber, NeedsStop);
                 data->bpEnabled = false;
             }
         }
@@ -2271,13 +2275,13 @@ void GdbEngine::attemptBreakpointSynchronization()
 void GdbEngine::loadSymbols(const QString &moduleName)
 {
     // FIXME: gdb does not understand quoted names here (tested with 6.8)
-    postCommand(_("sharedlibrary ") + dotEscape(moduleName));
+    postCommand("sharedlibrary " + dotEscape(moduleName.toLocal8Bit()));
     reloadModulesInternal();
 }
 
 void GdbEngine::loadAllSymbols()
 {
-    postCommand(_("sharedlibrary .*"));
+    postCommand("sharedlibrary .*");
     reloadModulesInternal();
 }
 
@@ -2324,10 +2328,10 @@ void GdbEngine::reloadModules()
 void GdbEngine::reloadModulesInternal()
 {
     m_modulesListOutdated = false;
-    postCommand(_("info shared"), NeedsStop, CB(handleModulesList));
+    postCommand("info shared", NeedsStop, CB(handleModulesList));
 #if 0
     if (m_gdbVersion < 70000 && !m_isMacGdb)
-        postCommand(_("set stop-on-solib-events 1"));
+        postCommand("set stop-on-solib-events 1");
 #endif
 }
 
@@ -2402,10 +2406,10 @@ void GdbEngine::reloadSourceFilesInternal()
 {
     QTC_ASSERT(!m_sourcesListUpdating, /**/);
     m_sourcesListUpdating = true;
-    postCommand(_("-file-list-exec-source-files"), NeedsStop, CB(handleQuerySources));
+    postCommand("-file-list-exec-source-files", NeedsStop, CB(handleQuerySources));
 #if 0
     if (m_gdbVersion < 70000 && !m_isMacGdb)
-        postCommand(_("set stop-on-solib-events 1"));
+        postCommand("set stop-on-solib-events 1");
 #endif
 }
 
@@ -2425,7 +2429,7 @@ void GdbEngine::selectThread(int index)
     QTC_ASSERT(index < threads.size(), return);
     int id = threads.at(index).id;
     showStatusMessage(tr("Retrieving data for stack view..."), 10000);
-    postCommand(_("-thread-select %1").arg(id), CB(handleStackSelectThread));
+    postCommand("-thread-select " + QByteArray::number(id), CB(handleStackSelectThread));
 }
 
 void GdbEngine::handleStackSelectThread(const GdbResponse &)
@@ -2440,17 +2444,16 @@ void GdbEngine::handleStackSelectThread(const GdbResponse &)
 
 void GdbEngine::reloadFullStack()
 {
-    QString cmd = _("-stack-list-frames");
-    postCommand(cmd, WatchUpdate, CB(handleStackListFrames),
+    postCommand("-stack-list-frames", WatchUpdate, CB(handleStackListFrames),
         QVariant::fromValue<StackCookie>(StackCookie(true, true)));
 }
 
 void GdbEngine::reloadStack(bool forceGotoLocation)
 {
-    QString cmd = _("-stack-list-frames");
+    QByteArray cmd = "-stack-list-frames";
     int stackDepth = theDebuggerAction(MaximalStackDepth)->value().toInt();
     if (stackDepth && !m_gdbAdapter->isTrkAdapter())
-        cmd += _(" 0 ") + QString::number(stackDepth);
+        cmd += " 0 " + QByteArray::number(stackDepth);
     // FIXME: gdb 6.4 symbianelf likes to be asked twice. The first time it
     // returns with "^error,msg="Previous frame identical to this frame
     // (corrupt stack?)". Might be related to the fact that we can't
@@ -2519,7 +2522,7 @@ void GdbEngine::handleStackListFrames(const GdbResponse &response)
         if (targetFrame == -1 && isBogus) {
             setTokenBarrier();
             setState(InferiorRunningRequested);
-            postCommand(_("-exec-finish"), RunRequest, CB(handleExecContinue));
+            postCommand("-exec-finish", RunRequest, CB(handleExecContinue));
             showStatusMessage(tr("Jumping out of bogus frame..."), 1000);
             return;
         }
@@ -2588,7 +2591,7 @@ void GdbEngine::activateFrame(int frameIndex)
         // Assuming the command always succeeds this saves a roundtrip.
         // Otherwise the lines below would need to get triggered
         // after a response to this -stack-select-frame here.
-        postCommand(_("-stack-select-frame ") + QString::number(frameIndex));
+        postCommand("-stack-select-frame " + QByteArray::number(frameIndex));
 
         stackHandler->setCurrentIndex(frameIndex);
         updateLocals();
@@ -2632,18 +2635,18 @@ void GdbEngine::reloadRegisters()
     if (state() != InferiorStopped)
         return;
     if (!m_registerNamesListed) {
-        postCommand(_("-data-list-register-names"), CB(handleRegisterListNames));
+        postCommand("-data-list-register-names", CB(handleRegisterListNames));
         m_registerNamesListed = true;
     }
 
     if (m_gdbAdapter->isTrkAdapter()) {
         // FIXME: remove that special case. This is only to prevent
         // gdb from asking for the values of the fixed point registers
-        postCommand(_("-data-list-register-values x 0 1 2 3 4 5 6 7 8 9 "
-                      "10 11 12 13 14 15 25"),
+        postCommand("-data-list-register-values x 0 1 2 3 4 5 6 7 8 9 "
+                      "10 11 12 13 14 15 25",
                     Discardable, CB(handleRegisterListValues));
     } else {
-        postCommand(_("-data-list-register-values x"),
+        postCommand("-data-list-register-values x",
                     Discardable, CB(handleRegisterListValues));
     }
 }
@@ -2653,11 +2656,11 @@ void GdbEngine::setRegisterValue(int nr, const QString &value)
     Register reg = manager()->registerHandler()->registers().at(nr);
     //qDebug() << "NOT IMPLEMENTED: CHANGE REGISTER " << nr << reg.name << ":"
     //    << value;
-    postCommand(_("-var-delete \"R@\""));
-    postCommand(_("-var-create \"R@\" * $%1").arg(reg.name));
-    postCommand(_("-var-assign \"R@\" %1").arg(value));
-    postCommand(_("-var-delete \"R@\""));
-    //postCommand(_("-data-list-register-values d"),
+    postCommand("-var-delete \"R@\"");
+    postCommand("-var-create \"R@\" * $" + reg.name);
+    postCommand("-var-assign \"R@\" " + value.toLatin1());
+    postCommand("-var-delete \"R@\"");
+    //postCommand("-data-list-register-values d",
     //            Discardable, CB(handleRegisterListValues));
     reloadRegisters();
 }
@@ -2671,7 +2674,7 @@ void GdbEngine::handleRegisterListNames(const GdbResponse &response)
 
     QList<Register> registers;
     foreach (const GdbMi &item, response.data.findChild("register-names").children())
-        registers.append(Register(_(item.data())));
+        registers.append(Register(item.data()));
 
     manager()->registerHandler()->setRegisters(registers);
 }
@@ -2721,19 +2724,19 @@ bool GdbEngine::supportsThreads() const
 static QString m_toolTipExpression;
 static QPoint m_toolTipPos;
 
-static QString tooltipINameForExpression(const QString &exp)
+static QByteArray tooltipINameForExpression(const QByteArray &exp)
 {
     // FIXME: 'exp' can contain illegal characters
-    //return QLatin1String("tooltip.") + exp;
+    //return "tooltip." + exp;
     Q_UNUSED(exp)
-    return QLatin1String("tooltip.x");
+    return "tooltip.x";
 }
 
 bool GdbEngine::showToolTip()
 {
     WatchHandler *handler = manager()->watchHandler();
     WatchModel *model = handler->model(TooltipsWatch);
-    QString iname = tooltipINameForExpression(m_toolTipExpression);
+    QByteArray iname = tooltipINameForExpression(m_toolTipExpression.toLatin1());
     WatchItem *item = model->findItem(iname, model->rootItem());
     if (!item) {
         hideDebuggerToolTip();
@@ -2819,9 +2822,9 @@ void GdbEngine::setToolTipExpression(const QPoint &mousePos,
 */
 
     WatchData toolTip;
-    toolTip.exp = exp;
+    toolTip.exp = exp.toLatin1();
     toolTip.name = exp;
-    toolTip.iname = tooltipINameForExpression(exp);
+    toolTip.iname = tooltipINameForExpression(toolTip.exp);
     manager()->watchHandler()->removeData(toolTip.iname);
     manager()->watchHandler()->insertData(toolTip);
 }
@@ -2880,22 +2883,22 @@ static void setWatchDataValueEditable(WatchData &data, const GdbMi &mi)
 static void setWatchDataExpression(WatchData &data, const GdbMi &mi)
 {
     if (mi.isValid())
-        data.exp = _(mi.data());
+        data.exp = mi.data();
 }
 
 static void setWatchDataAddress(WatchData &data, const GdbMi &mi)
 {
     if (mi.isValid()) {
-        data.addr = _(mi.data());
-        if (data.exp.isEmpty() && !data.addr.startsWith(_("$")))
-            data.exp = _("*(") + gdbQuoteTypes(data.type) + _("*)") + data.addr;
+        data.addr = mi.data();
+        if (data.exp.isEmpty() && !data.addr.startsWith("$"))
+            data.exp = "*(" + gdbQuoteTypes(data.type).toLatin1() + "*)" + data.addr;
     }
 }
 
 static void setWatchDataSAddress(WatchData &data, const GdbMi &mi)
 {
     if (mi.isValid())
-        data.saddr = _(mi.data());
+        data.saddr = mi.data();
 }
 
 void GdbEngine::setUseDebuggingHelpers(const QVariant &on)
@@ -2943,13 +2946,13 @@ static inline QString msgRetrievingWatchData(int pending)
 void GdbEngine::runDirectDebuggingHelper(const WatchData &data, bool dumpChildren)
 {
     Q_UNUSED(dumpChildren)
-    QString type = data.type;
-    QString cmd;
+    QByteArray type = data.type.toLatin1();
+    QByteArray cmd;
 
-    if (type == __("QString") || type.endsWith(__("::QString")))
-        cmd = _("qdumpqstring (&(") + data.exp + _("))");
-    else if (type == __("QStringList") || type.endsWith(__("::QStringList")))
-        cmd = _("qdumpqstringlist (&(") + data.exp + _("))");
+    if (type == "QString" || type.endsWith("::QString"))
+        cmd = "qdumpqstring (&(" + data.exp + "))";
+    else if (type == "QStringList" || type.endsWith("::QStringList"))
+        cmd = "qdumpqstringlist (&(" + data.exp + "))";
 
     QVariant var;
     var.setValue(data);
@@ -2967,10 +2970,10 @@ void GdbEngine::runDebuggingHelper(const WatchData &data0, bool dumpChildren)
     WatchData data = data0;
 
     // Avoid endless loops created by faulty dumpers.
-    QString processedName = QString(_("%1-%2").arg(dumpChildren).arg(data.iname));
+    QByteArray processedName = QByteArray::number(dumpChildren) + '-' + data.iname;
     if (m_processedNames.contains(processedName)) {
         gdbInputAvailable(LogStatus,
-            _("<Breaking endless loop for %1>").arg(data.iname));
+            _("<Breaking endless loop for " + data.iname + ">"));
         data.setAllUnneeded();
         data.setValue(_("<unavailable>"));
         data.setHasChildren(false);
@@ -2989,13 +2992,13 @@ void GdbEngine::runDebuggingHelper(const WatchData &data0, bool dumpChildren)
     const int protocol = 2;
     //int protocol = isDisplayedIName(data.iname) ? 3 : 2;
 
-    QString addr;
-    if (data.addr.startsWith(__("0x")))
-        addr = _("(void*)") + data.addr;
+    QByteArray addr;
+    if (data.addr.startsWith("0x"))
+        addr = "(void*)" + data.addr;
     else if (data.exp.isEmpty()) // happens e.g. for QAbstractItem
-        addr = _("0");
+        addr = "0";
     else
-        addr = _("&(") + data.exp + _c(')');
+        addr = "&(" + data.exp + ')';
 
     sendWatchParameters(params);
 
@@ -3004,27 +3007,27 @@ void GdbEngine::runDebuggingHelper(const WatchData &data0, bool dumpChildren)
             protocol << ",0," <<  addr << ',' << (dumpChildren ? "1" : "0")
             << ',' << extraArgs.join(QString(_c(','))) <<  ')';
 
-    postCommand(cmd, WatchUpdate | NonCriticalResponse);
+    postCommand(cmd.toLatin1(), WatchUpdate | NonCriticalResponse);
 
     showStatusMessage(msgRetrievingWatchData(m_pendingRequests + 1), 10000);
 
     // retrieve response
-    postCommand(_("p (char*)&qDumpOutBuffer"), WatchUpdate,
+    postCommand("p (char*)&qDumpOutBuffer", WatchUpdate,
         CB(handleDebuggingHelperValue2), qVariantFromValue(data));
 }
 
 void GdbEngine::createGdbVariable(const WatchData &data)
 {
-    if (data.iname == _("local.flist.0")) {
+    if (data.iname == "local.flist.0") {
         int i = 1;
         Q_UNUSED(i);
     }
-    postCommand(_("-var-delete \"%1\"").arg(data.iname), WatchUpdate);
-    QString exp = data.exp;
-    if (exp.isEmpty() && data.addr.startsWith(__("0x")))
-        exp = _("*(") + gdbQuoteTypes(data.type) + _("*)") + data.addr;
+    postCommand("-var-delete \"" + data.iname + '"', WatchUpdate);
+    QByteArray exp = data.exp;
+    if (exp.isEmpty() && data.addr.startsWith("0x"))
+        exp = "*(" + gdbQuoteTypes(data.type).toLatin1() + "*)" + data.addr;
     QVariant val = QVariant::fromValue<WatchData>(data);
-    postCommand(_("-var-create \"%1\" * \"%2\"").arg(data.iname).arg(exp),
+    postCommand("-var-create \"" + data.iname + "\" * \"" + exp + '"',
         WatchUpdate, CB(handleVarCreate), val);
 }
 
@@ -3074,16 +3077,16 @@ void GdbEngine::updateSubItem(const WatchData &data0)
     
         if (theDebuggerBoolSetting(AutoDerefPointers)) {
             // Try automatic dereferentiation
-            data.exp = _("(*(") + data.exp + _("))");
+            data.exp = "(*(" + data.exp + "))";
             data.type = data.type + _("."); // FIXME: fragile HACK to avoid recursion
             insertData(data);
         } else {
             data.setChildrenUnneeded();
             insertData(data);
             WatchData data1;
-            data1.iname = data.iname + QLatin1String(".*");
+            data1.iname = data.iname + ".*";
             data1.name = QLatin1Char('*') + data.name;
-            data1.exp = QLatin1String("(*(") + data.exp + QLatin1String("))");
+            data1.exp = "(*(" + data.exp + "))";
             data1.type = stripPointerType(data.type);
             data1.setValueNeeded();
             data1.setChildrenUnneeded();
@@ -3126,7 +3129,7 @@ void GdbEngine::updateSubItem(const WatchData &data0)
         #if DEBUG_SUBITEM
         qDebug() << "UPDATE SUBITEM: VALUE";
         #endif
-        QString cmd = _("-var-evaluate-expression \"") + data.iname + _c('"');
+        QByteArray cmd = "-var-evaluate-expression \"" + data.iname + '"';
         postCommand(cmd, WatchUpdate, CB(handleEvaluateExpression),
             QVariant::fromValue(data));
         return;
@@ -3152,7 +3155,7 @@ void GdbEngine::updateSubItem(const WatchData &data0)
 
     if (data.isChildrenNeeded()) {
         QTC_ASSERT(!data.variable.isEmpty(), return); // tested above
-        QString cmd = _("-var-list-children --all-values \"") + data.variable + _c('"');
+        QByteArray cmd = "-var-list-children --all-values \"" + data.variable + '"';
         postCommand(cmd, WatchUpdate, CB(handleVarListChildren), QVariant::fromValue(data));
         return;
     }
@@ -3179,7 +3182,7 @@ void GdbEngine::updateSubItem(const WatchData &data0)
 
     if (data.isHasChildrenNeeded()) {
         QTC_ASSERT(!data.variable.isEmpty(), return); // tested above
-        QString cmd = _("-var-list-children --all-values \"") + data.variable + _c('"');
+        QByteArray cmd = "-var-list-children --all-values \"" + data.variable + '"';
         postCommand(cmd, Discardable,
             CB(handleVarListChildren), QVariant::fromValue(data));
         return;
@@ -3201,16 +3204,16 @@ void GdbEngine::updateWatchData(const WatchData &data)
         insertData(data1);
         rebuildModel();
 #else
-        if (data.iname.endsWith(_(".")))
+        if (data.iname.endsWith("."))
             return;
 
         // Avoid endless loops created by faulty dumpers.
-        QString processedName = QString(_("%1-%2").arg(1).arg(data.iname));
+        QByteArray processedName = "1-" + data.iname;
         //qDebug() << "PROCESSED NAMES: " << processedName << m_processedNames;
         if (m_processedNames.contains(processedName)) {
             WatchData data1 = data;
             gdbInputAvailable(LogStatus,
-                _("<Breaking endless loop for %1>").arg(data1.iname));
+                _("<Breaking endless loop for " + data.iname + '>'));
             data1.setAllUnneeded();
             data1.setValue(_("<unavailable>"));
             data1.setHasChildren(false);
@@ -3310,7 +3313,7 @@ void GdbEngine::handleQueryDebuggingHelper(const GdbResponse &response)
     //qDebug() << m_availableSimpleDebuggingHelpers << "DATA DUMPERS AVAILABLE";
 }
 
-static inline QString arrayFillCommand(const char *array, const QByteArray &params)
+static inline QByteArray arrayFillCommand(const char *array, const QByteArray &params)
 {
     char buf[50];
     sprintf(buf, "set {char[%d]} &%s = {", params.size(), array);
@@ -3322,21 +3325,21 @@ static inline QString arrayFillCommand(const char *array, const QByteArray &para
         encoded.append(buf);
     }
     encoded[encoded.size() - 1] = '}';
-    return _(encoded);
+    return encoded;
 }
 
 void GdbEngine::sendWatchParameters(const QByteArray &params0)
 {
     QByteArray params = params0;
     params.append('\0');
-    const QString inBufferCmd = arrayFillCommand("qDumpInBuffer", params);
+    const QByteArray inBufferCmd = arrayFillCommand("qDumpInBuffer", params);
 
     params.replace('\0','!');
     gdbInputAvailable(LogMisc, QString::fromUtf8(params));
 
     params.clear();
     params.append('\0');
-    const QString outBufferCmd = arrayFillCommand("qDumpOutBuffer", params);
+    const QByteArray outBufferCmd = arrayFillCommand("qDumpOutBuffer", params);
 
     postCommand(inBufferCmd);
     postCommand(outBufferCmd);
@@ -3507,9 +3510,9 @@ void GdbEngine::handleChildren(const WatchData &data0, const GdbMi &item,
             data1.name = QString::number(i);
         GdbMi iname = child.findChild("iname");
         if (iname.isValid())
-            data1.iname = _(iname.data());
+            data1.iname = iname.data();
         else
-            data1.iname = data.iname + _c('.') + data1.name;
+            data1.iname = data.iname + '.' + data1.name.toLatin1();
         if (!data1.name.isEmpty() && data1.name.at(0).isDigit())
             data1.name = _c('[') + data1.name + _c(']');
         QByteArray key = child.findChild("key").data();
@@ -3572,12 +3575,12 @@ void GdbEngine::handleDebuggingHelperValue3(const GdbResponse &response)
                     WatchData data1;
                     data1.name = _("[%1]").arg(i);
                     data1.type = data.type.left(data.type.size() - 4);
-                    data1.iname = data.iname + _(".%1").arg(i);
-                    data1.addr = _(list.at(i));
-                    data1.exp = _("((") + gdbQuoteTypes(data1.type) + _("*)") + data1.addr + _c(')');
+                    data1.iname = data.iname + '.' + QByteArray::number(i);
+                    data1.addr = list.at(i);
+                    data1.exp = "((" + gdbQuoteTypes(data1.type).toLatin1() + "*)" + data1.addr + ")";
                     data1.setHasChildren(false);
                     data1.setValueNeeded();
-                    QString cmd = _("qdumpqstring (") + data1.exp + _c(')');
+                    QByteArray cmd = "qdumpqstring (" + data1.exp + ')';
                     QVariant var;
                     var.setValue(data1);
                     postCommand(cmd, WatchUpdate, CB(handleDebuggingHelperValue3), var);
@@ -3605,34 +3608,42 @@ void GdbEngine::updateLocals(const QVariant &cookie)
         manager()->watchHandler()->beginCycle();
         m_toolTipExpression.clear();
         WatchHandler *handler = m_manager->watchHandler();
-        QStringList expanded = handler->expandedINames().toList();
-        expanded.append(_("defaults"));
-        QString watchers;
-        QHash<QString, int> watcherNames = handler->watcherNames();
-        QHashIterator<QString, int> it(watcherNames);
+
+        QByteArray expanded;
+        QSet<QByteArray> expandedINames = handler->expandedINames();
+        QSetIterator<QByteArray> jt(expandedINames);
+        while (jt.hasNext()) {
+            expanded.append(jt.next());
+            expanded.append(',');
+        }
+        if (expanded.isEmpty())
+            expanded.append("defaults,");
+        expanded.chop(1);
+
+        QByteArray watchers;
+        QHash<QByteArray, int> watcherNames = handler->watcherNames();
+        QHashIterator<QByteArray, int> it(watcherNames);
         while (it.hasNext()) {
             it.next();
             if (!watchers.isEmpty())
-                watchers += _("$$");
-            if (it.key() == WatchHandler::watcherEditPlaceHolder()) 
-                watchers += _("<Edit>$%1").arg(it.value());
+                watchers += "$$";
+            if (it.key() == WatchHandler::watcherEditPlaceHolder().toLatin1())
+                watchers += "<Edit>$" + QByteArray::number(it.value());
             else
-                watchers += _("%1$%2").arg(it.key()).arg(it.value());
+                watchers += it.key() + '$' + QByteArray::number(it.value());
         }
 
-        QString options;
+        QByteArray options;
         if (theDebuggerBoolSetting(UseDebuggingHelpers))
-            options += _("fancy,");
+            options += "fancy,";
         if (theDebuggerBoolSetting(AutoDerefPointers))
-            options += _("autoderef,");
+            options += "autoderef,";
         if (options.isEmpty())
-            options += _("defaults,");
+            options += "defaults,";
         options.chop(1);
 
-        postCommand(_("-interpreter-exec console \"bb %1 %2 %3\"")
-                .arg(options)
-                .arg(expanded.join(_(",")))
-                .arg(_(watchers.toLatin1().toHex())),
+        postCommand("-interpreter-exec console \"bb "
+            + options + ' ' + expanded + ' ' + watchers.toHex() + '"',
             Discardable,
             CB(handleStackFrame));
     } else {
@@ -3649,12 +3660,12 @@ void GdbEngine::updateLocals(const QVariant &cookie)
                 && inferiorPid() > 0)
             tryQueryDebuggingHelpers();
 
-        QString level = QString::number(currentFrame());
+        QByteArray level = QByteArray::number(currentFrame());
         // '2' is 'list with type and value'
-        QString cmd = _("-stack-list-arguments 2 ") + level + _c(' ') + level;
+        QByteArray cmd = "-stack-list-arguments 2 " + level + ' ' + level;
         postCommand(cmd, WatchUpdate, CB(handleStackListArguments));
         // '2' is 'list with type and value'
-        postCommand(_("-stack-list-locals 2"), WatchUpdate,
+        postCommand("-stack-list-locals 2", WatchUpdate,
             CB(handleStackListLocals), cookie); // stage 2/2
     }
 }
@@ -3676,7 +3687,7 @@ void GdbEngine::handleStackFrame(const GdbResponse &response)
         all.fromStringMultiple(out);
         
         GdbMi locals = all.findChild("locals");
-        WatchData *data = manager()->watchHandler()->findItem(_("local"));
+        WatchData *data = manager()->watchHandler()->findItem("local");
         QTC_ASSERT(data, return);
         QList<WatchData> list;
         handleChildren(*data, locals, &list);
@@ -3685,7 +3696,7 @@ void GdbEngine::handleStackFrame(const GdbResponse &response)
         manager()->watchHandler()->insertBulkData(list);
 
         GdbMi watchers = all.findChild("watchers");
-        data = manager()->watchHandler()->findItem(_("watch"));
+        data = manager()->watchHandler()->findItem("watch");
         QTC_ASSERT(data, return);
         list.clear();
         handleChildren(*data, watchers, &list);
@@ -3801,7 +3812,7 @@ WatchData GdbEngine::localVariable(const GdbMi &item,
         ++(it.value());
         WatchData data;
         QString nam = _(name);
-        data.iname = _("local.") + nam + QString::number(n + 1);
+        data.iname = "local." + name + QByteArray::number(n + 1);
         //: Variable %1 is the variable name, %2 is a simple count
         data.name = WatchData::shadowedName(nam, n);
         if (uninitializedVariables.contains(data.name)) {
@@ -3818,9 +3829,9 @@ WatchData GdbEngine::localVariable(const GdbMi &item,
     seen->insert(name, 1);
     WatchData data;
     QString nam = _(name);
-    data.iname = _("local.") + nam;
+    data.iname = "local." + name;
     data.name = nam;
-    data.exp = nam;
+    data.exp = name;
     data.framekey = m_currentFrame + data.name;
     setWatchDataType(data, item.findChild("type"));
     if (uninitializedVariables.contains(data.name)) {
@@ -3869,10 +3880,10 @@ void GdbEngine::handleVarListChildrenHelper(const GdbMi &item,
     //qDebug() <<  "VAR_LIST_CHILDREN: ITEM" << item.toString();
     QByteArray exp = item.findChild("exp").data();
     QByteArray name = item.findChild("name").data();
-    if (isAccessSpecifier(_(exp))) {
+    if (isAccessSpecifier(exp)) {
         // suppress 'private'/'protected'/'public' level
         WatchData data;
-        data.variable = _(name);
+        data.variable = name;
         data.iname = parent.iname;
         //data.iname = data.variable;
         data.exp = parent.exp;
@@ -3881,7 +3892,7 @@ void GdbEngine::handleVarListChildrenHelper(const GdbMi &item,
         data.setHasChildrenUnneeded();
         data.setChildrenUnneeded();
         //qDebug() << "DATA" << data.toString();
-        QString cmd = _("-var-list-children --all-values \"") + data.variable + _c('"');
+        QByteArray cmd = "-var-list-children --all-values \"" + data.variable + '"';
         //iname += '.' + exp;
         postCommand(cmd, WatchUpdate,
             CB(handleVarListChildren), QVariant::fromValue(data));
@@ -3889,19 +3900,19 @@ void GdbEngine::handleVarListChildrenHelper(const GdbMi &item,
         // happens for structs without data, e.g. interfaces.
         WatchData data;
         data.name = _(exp);
-        data.iname = parent.iname + _c('.') + data.name;
-        data.variable = _(name);
+        data.iname = parent.iname + '.' + data.name.toLatin1();
+        data.variable = name;
         setWatchDataType(data, item.findChild("type"));
         setWatchDataValue(data, item.findChild("value"));
         setWatchDataAddress(data, item.findChild("addr"));
         setWatchDataSAddress(data, item.findChild("saddr"));
         data.setHasChildren(false);
         insertData(data);
-    } else if (parent.iname.endsWith(_c('.'))) {
+    } else if (parent.iname.endsWith('.')) {
         // Happens with anonymous unions
         WatchData data;
-        data.iname = _(name);
-        QString cmd = _("-var-list-children --all-values \"") + data.variable + _c('"');
+        data.iname = name;
+        QByteArray cmd = "-var-list-children --all-values \"" + data.variable + '"';
         postCommand(cmd, WatchUpdate,
             CB(handleVarListChildren), QVariant::fromValue(data));
     } else if (exp == "staticMetaObject") {
@@ -3912,8 +3923,8 @@ void GdbEngine::handleVarListChildrenHelper(const GdbMi &item,
         // I am not sure this is a good idea...
     } else {
         WatchData data;
-        data.iname = parent.iname + _c('.') + __(exp);
-        data.variable = _(name);
+        data.iname = parent.iname + '.' + exp;
+        data.variable = name;
         setWatchDataType(data, item.findChild("type"));
         setWatchDataValue(data, item.findChild("value"));
         setWatchDataAddress(data, item.findChild("addr"));
@@ -3925,7 +3936,7 @@ void GdbEngine::handleVarListChildrenHelper(const GdbMi &item,
         data.name = _(exp);
         if (data.type == data.name) {
             if (isPointerType(parent.type)) {
-                data.exp = _("*(") + parent.exp + _c(')');
+                data.exp = "*(" + parent.exp + ')';
                 data.name = _("*") + parent.name;
             } else {
                 // A type we derive from? gdb crashes when creating variables here
@@ -3933,24 +3944,24 @@ void GdbEngine::handleVarListChildrenHelper(const GdbMi &item,
             }
         } else if (exp.startsWith("*")) {
             // A pointer
-            data.exp = _("*(") + parent.exp + _c(')');
+            data.exp = "*(" + parent.exp + ')';
         } else if (startsWithDigit(data.name)) {
             // An array. No variables needed?
             data.name = _c('[') + data.name + _c(']');
-            data.exp = parent.exp + _('[' + exp + ']');
+            data.exp = parent.exp + '[' + exp + ']';
         } else if (0 && parent.name.endsWith(_c('.'))) {
             // Happens with anonymous unions
-            data.exp = parent.exp + data.name;
+            data.exp = parent.exp + data.name.toLatin1();
             //data.name = "<anonymous union>";
         } else if (exp.isEmpty()) {
             // Happens with anonymous unions
             data.exp = parent.exp;
             data.name = tr("<n/a>");
-            data.iname = parent.iname + _(".@");
+            data.iname = parent.iname + ".@";
             data.type = tr("<anonymous union>");
         } else {
             // A structure. Hope there's nothing else...
-            data.exp = parent.exp + _c('.') + data.name;
+            data.exp = parent.exp + '.' + data.name.toLatin1();
         }
 
         if (hasDebuggingHelperForType(data.type)) {
@@ -3982,7 +3993,7 @@ void GdbEngine::handleVarListChildren(const GdbResponse &response)
             // happens e.g. if no debug information is present or
             // if the class really has no children
             WatchData data1;
-            data1.iname = data.iname + _(".child");
+            data1.iname = data.iname + ".child";
             //: About variable's value
             data1.value = tr("<no information>");
             data1.hasChildren = false;
@@ -3990,12 +4001,14 @@ void GdbEngine::handleVarListChildren(const GdbResponse &response)
             insertData(data1);
             data.setAllUnneeded();
             insertData(data);
-        } else if (!isAccessSpecifier(data.variable.split(_c('.')).last())) {
-            data.setChildrenUnneeded();
-            insertData(data);
-        } else {
+        } else if (data.variable.endsWith("private")
+                || data.variable.endsWith("protected")
+                || data.variable.endsWith("public")) {
             // this skips the spurious "public", "private" etc levels
             // gdb produces
+        } else {
+            data.setChildrenUnneeded();
+            insertData(data);
         }
     } else {
         data.setError(QString::fromLocal8Bit(response.data.findChild("msg").data()));
@@ -4016,9 +4029,9 @@ void GdbEngine::handleChangedItem(QStandardItem *item)
 
 void GdbEngine::assignValueInDebugger(const QString &expression, const QString &value)
 {
-    postCommand(_("-var-delete assign"));
-    postCommand(_("-var-create assign * ") + expression);
-    postCommand(_("-var-assign assign ") + value, Discardable, CB(handleVarAssign));
+    postCommand("-var-delete assign");
+    postCommand("-var-create assign * " + expression.toLatin1());
+    postCommand("-var-assign assign " + value.toLatin1(), Discardable, CB(handleVarAssign));
 }
 
 QString GdbEngine::qtDumperLibraryName() const
@@ -4070,7 +4083,7 @@ void GdbEngine::tryLoadDebuggingHelpers()
         file.open(QIODevice::ReadOnly);
         QByteArray contents = file.readAll(); 
         m_debuggingHelperState = DebuggingHelperLoadTried;
-        postCommand(_(contents));
+        postCommand(contents);
         return;
     }
     if (m_dumperInjectionLoad && inferiorPid() <= 0) // Need PID to inject
@@ -4082,20 +4095,23 @@ void GdbEngine::tryLoadDebuggingHelpers()
         return;
 
     m_debuggingHelperState = DebuggingHelperLoadTried;
-    const QString dlopenLib =
-        (startParameters().startMode == StartRemote)
-            ? startParameters().remoteDumperLib : manager()->qtDumperLibraryName();
+    QByteArray dlopenLib;
+    if (startParameters().startMode == StartRemote)
+        dlopenLib = startParameters().remoteDumperLib.toLocal8Bit();
+    else
+        manager()->qtDumperLibraryName().toLocal8Bit();
 #if defined(Q_OS_WIN)
     if (m_dumperInjectionLoad) {
         /// Launch asynchronous remote thread to load.
         SharedLibraryInjector injector(inferiorPid());
         QString errorMessage;
-        if (injector.remoteInject(dlopenLib, false, &errorMessage)) {
+        const QString dlopenLibString = _(dlopenLib);
+        if (injector.remoteInject(dlopenLibString, false, &errorMessage)) {
             debugMessage(_("Dumper injection loading triggered (%1)...").
-                         arg(dlopenLib));
+                         arg(dlopenLibString));
         } else {
             debugMessage(_("Dumper loading (%1) failed: %2").
-                         arg(dlopenLib, errorMessage));
+                         arg(dlopenLibString, errorMessage));
             debugMessage(errorMessage);
             manager()->showQtDumperLibraryWarning(errorMessage);
             m_debuggingHelperState = DebuggingHelperUnavailable;
@@ -4103,33 +4119,33 @@ void GdbEngine::tryLoadDebuggingHelpers()
         }
     } else {
         debugMessage(_("Loading dumpers via debugger call (%1)...").
-                     arg(dlopenLib));
-        postCommand(_("sharedlibrary .*")); // for LoadLibraryA
-        //postCommand(_("handle SIGSEGV pass stop print"));
-        //postCommand(_("set unwindonsignal off"));
-        postCommand(_("call LoadLibraryA(\"") + GdbMi::escapeCString(dlopenLib) + _("\")"),
+                     arg(_(dlopenLib)));
+        postCommand("sharedlibrary .*"); // for LoadLibraryA
+        //postCommand("handle SIGSEGV pass stop print");
+        //postCommand("set unwindonsignal off");
+        postCommand("call LoadLibraryA(\"" + GdbMi::escapeCString(dlopenLib) + "\")",
                     CB(handleDebuggingHelperSetup));
-        postCommand(_("sharedlibrary ") + dotEscape(dlopenLib));
+        postCommand("sharedlibrary " + dotEscape(dlopenLib));
     }
 #elif defined(Q_OS_MAC)
-    //postCommand(_("sharedlibrary libc")); // for malloc
-    //postCommand(_("sharedlibrary libdl")); // for dlopen
-    postCommand(_("call (void)dlopen(\"") + GdbMi::escapeCString(dlopenLib)
-                + _("\", " STRINGIFY(RTLD_NOW) ")"),
+    //postCommand("sharedlibrary libc"); // for malloc
+    //postCommand("sharedlibrary libdl"); // for dlopen
+    postCommand("call (void)dlopen(\"" + GdbMi::escapeCString(dlopenLib)
+                + "\", " STRINGIFY(RTLD_NOW) ")",
         CB(handleDebuggingHelperSetup));
-    //postCommand(_("sharedlibrary ") + dotEscape(dlopenLib));
+    //postCommand("sharedlibrary " + dotEscape(dlopenLib));
 #else
-    //postCommand(_("p dlopen"));
-    postCommand(_("sharedlibrary libc")); // for malloc
-    postCommand(_("sharedlibrary libdl")); // for dlopen
-    postCommand(_("call (void*)dlopen(\"") + GdbMi::escapeCString(dlopenLib)
-                + _("\", " STRINGIFY(RTLD_NOW) ")"),
+    //postCommand("p dlopen");
+    postCommand("sharedlibrary libc"); // for malloc
+    postCommand("sharedlibrary libdl"); // for dlopen
+    postCommand("call (void*)dlopen(\"" + GdbMi::escapeCString(dlopenLib)
+                + "\", " STRINGIFY(RTLD_NOW) ")",
         CB(handleDebuggingHelperSetup));
     // some older systems like CentOS 4.6 prefer this:
-    postCommand(_("call (void*)__dlopen(\"") + GdbMi::escapeCString(dlopenLib)
-                + _("\", " STRINGIFY(RTLD_NOW) ")"),
+    postCommand("call (void*)__dlopen(\"" + GdbMi::escapeCString(dlopenLib)
+                + "\", " STRINGIFY(RTLD_NOW) ")",
         CB(handleDebuggingHelperSetup));
-    postCommand(_("sharedlibrary ") + dotEscape(dlopenLib));
+    postCommand("sharedlibrary " + dotEscape(dlopenLib));
 #endif
     if (!m_dumperInjectionLoad)
         tryQueryDebuggingHelpers();
@@ -4138,23 +4154,25 @@ void GdbEngine::tryLoadDebuggingHelpers()
 void GdbEngine::tryQueryDebuggingHelpers()
 {
     // retrieve list of dumpable classes
-    postCommand(_("call (void*)qDumpObjectData440(1,0,0,0,0,0,0,0)"));
-    postCommand(_("p (char*)&qDumpOutBuffer"), CB(handleQueryDebuggingHelper));
+    postCommand("call (void*)qDumpObjectData440(1,0,0,0,0,0,0,0)");
+    postCommand("p (char*)&qDumpOutBuffer", CB(handleQueryDebuggingHelper));
 }
 
 void GdbEngine::recheckDebuggingHelperAvailability()
 {
     if (m_gdbAdapter->dumperHandling() != AbstractGdbAdapter::DumperNotAvailable) {
         // retreive list of dumpable classes
-        postCommand(_("call (void*)qDumpObjectData440(1,0,0,0,0,0,0,0)"));
-        postCommand(_("p (char*)&qDumpOutBuffer"), CB(handleQueryDebuggingHelper));
+        postCommand("call (void*)qDumpObjectData440(1,0,0,0,0,0,0,0)");
+        postCommand("p (char*)&qDumpOutBuffer", CB(handleQueryDebuggingHelper));
     }
 }
 
 void GdbEngine::watchPoint(const QPoint &pnt)
 {
     //qDebug() << "WATCH " << pnt;
-    postCommand(_("call (void*)watchPoint(%1,%2)").arg(pnt.x()).arg(pnt.y()),
+    QByteArray x = QByteArray::number(pnt.x());
+    QByteArray y = QByteArray::number(pnt.y());
+    postCommand("call (void*)watchPoint(" + x + ',' + y + ')',
         NeedsStop, CB(handleWatchPoint));
 }
 
@@ -4188,7 +4206,8 @@ struct MemoryAgentCookie
 void GdbEngine::fetchMemory(MemoryViewAgent *agent, quint64 addr, quint64 length)
 {
     //qDebug() << "GDB MEMORY FETCH" << agent << addr << length;
-    postCommand(_("-data-read-memory %1 x 1 1 %2").arg(addr).arg(length),
+    postCommand("-data-read-memory " + QByteArray::number(addr) + " x 1 1 "
+            + QByteArray::number(length),
         NeedsStop, CB(handleFetchMemory),
         QVariant::fromValue(MemoryAgentCookie(agent, addr)));
 }
@@ -4235,9 +4254,10 @@ void GdbEngine::fetchDisassembler(DisassemblerViewAgent *agent,
         fetchDisassemblerByAddress(agent, true);
     } else {
         // Disassemble full function:
-        QString cmd = _("-data-disassemble -f %1 -l %2 -n -1 -- 1");
-        postCommand(cmd.arg(frame.file).arg(frame.line),
-            Discardable, CB(handleFetchDisassemblerByLine),
+        QByteArray cmd = "-data-disassemble"
+            " -f " + frame.file.toLocal8Bit() +
+            " -l " + QByteArray::number(frame.line) + "-n -1 -- 1";
+        postCommand(cmd, Discardable, CB(handleFetchDisassemblerByLine),
             QVariant::fromValue(DisassemblerAgentCookie(agent)));
     }
 }
@@ -4249,16 +4269,16 @@ void GdbEngine::fetchDisassemblerByAddress(DisassemblerViewAgent *agent,
     bool ok = true;
     quint64 address = agent->address().toULongLong(&ok, 0);
     QTC_ASSERT(ok, qDebug() << "ADDRESS: " << agent->address() << address; return);
-    QString start = QString::number(address - 20, 16);
-    QString end = QString::number(address + 100, 16);
+    QByteArray start = QByteArray::number(address - 20, 16);
+    QByteArray end = QByteArray::number(address + 100, 16);
     // -data-disassemble [ -s start-addr -e end-addr ]
     //  | [ -f filename -l linenum [ -n lines ] ] -- mode
     if (useMixedMode) 
-        postCommand(_("-data-disassemble -s 0x%1 -e 0x%2 -- 1").arg(start).arg(end),
+        postCommand("-data-disassemble -s 0x" + start + " -e 0x" + end + " -- 1",
             Discardable, CB(handleFetchDisassemblerByAddress1),
             QVariant::fromValue(DisassemblerAgentCookie(agent)));
     else
-        postCommand(_("-data-disassemble -s 0x%1 -e 0x%2 -- 0").arg(start).arg(end),
+        postCommand("-data-disassemble -s 0x" + start + " -e 0x" + end + " -- 0",
             Discardable, CB(handleFetchDisassemblerByAddress0),
             QVariant::fromValue(DisassemblerAgentCookie(agent)));
 }
@@ -4420,8 +4440,8 @@ bool GdbEngine::startGdb(const QStringList &args, const QString &gdb, const QStr
         return false;
     }
 
-    const QString dumperSourcePath =
-        Core::ICore::instance()->resourcePath() + _("/gdbmacros/");
+    const QByteArray dumperSourcePath =
+        Core::ICore::instance()->resourcePath().toLocal8Bit() + "/gdbmacros/";
 
     // Do this only after the process is running, so we get no needless error
     // notifications
@@ -4437,48 +4457,46 @@ bool GdbEngine::startGdb(const QStringList &args, const QString &gdb, const QStr
     debugMessage(_("GDB STARTED, INITIALIZING IT"));
     m_commandTimer->setInterval(commandTimeoutTime());
 
-    postCommand(_("show version"), CB(handleShowVersion));
+    postCommand("show version", CB(handleShowVersion));
 
-    postCommand(_("-interpreter-exec console \"python execfile('%1dumper.py')\"")
-            .arg(dumperSourcePath),
+    postCommand("-interpreter-exec console \"python execfile('" + dumperSourcePath + "dumper.py')\"",
         NonCriticalResponse);
-    postCommand(_("-interpreter-exec console \"python execfile('%1gdbmacros.py')\"")
-            .arg(dumperSourcePath),
+    postCommand("-interpreter-exec console \"python execfile('" + dumperSourcePath + "gdbmacros.py')\"",
         NonCriticalResponse);
 
-    postCommand(_("-interpreter-exec console \"help bb\""),
+    postCommand("-interpreter-exec console \"help bb\"",
         CB(handleIsSynchroneous));
-    //postCommand(_("-enable-timings");
-    postCommand(_("set print static-members off")); // Seemingly doesn't work.
-    //postCommand(_("set debug infrun 1"));
-    //postCommand(_("define hook-stop\n-thread-list-ids\n-stack-list-frames\nend"));
-    //postCommand(_("define hook-stop\nprint 4\nend"));
-    //postCommand(_("define hookpost-stop\nprint 5\nend"));
-    //postCommand(_("define hook-call\nprint 6\nend"));
-    //postCommand(_("define hookpost-call\nprint 7\nend"));
-    //postCommand(_("set print object on")); // works with CLI, but not MI
-    //postCommand(_("set step-mode on"));  // we can't work with that yes
-    //postCommand(_("set exec-done-display on"));
-    //postCommand(_("set print pretty on"));
-    //postCommand(_("set confirm off"));
-    //postCommand(_("set pagination off"));
+    //postCommand("-enable-timings");
+    postCommand("set print static-members off"); // Seemingly doesn't work.
+    //postCommand("set debug infrun 1");
+    //postCommand("define hook-stop\n-thread-list-ids\n-stack-list-frames\nend");
+    //postCommand("define hook-stop\nprint 4\nend");
+    //postCommand("define hookpost-stop\nprint 5\nend");
+    //postCommand("define hook-call\nprint 6\nend");
+    //postCommand("define hookpost-call\nprint 7\nend");
+    //postCommand("set print object on"); // works with CLI, but not MI
+    //postCommand("set step-mode on");  // we can't work with that yes
+    //postCommand("set exec-done-display on");
+    //postCommand("set print pretty on");
+    //postCommand("set confirm off");
+    //postCommand("set pagination off");
 
     // The following does not work with 6.3.50-20050815 (Apple version gdb-1344)
     // (Mac OS 10.6), but does so for gdb-966 (10.5):
-    //postCommand(_("set print inferior-events 1"));
+    //postCommand("set print inferior-events 1");
 
-    postCommand(_("set breakpoint pending on"));
-    postCommand(_("set print elements 10000"));
+    postCommand("set breakpoint pending on");
+    postCommand("set print elements 10000");
 
-    //postCommand(_("set substitute-path /var/tmp/qt-x11-src-4.5.0 "
-    //    "/home/sandbox/qtsdk-2009.01/qt"));
+    //postCommand("set substitute-path /var/tmp/qt-x11-src-4.5.0 "
+    //    "/home/sandbox/qtsdk-2009.01/qt");
 
     // one of the following is needed to prevent crashes in gdb on code like:
     //  template <class T> T foo() { return T(0); }
     //  int main() { return foo<int>(); }
     //  (gdb) call 'int foo<int>'()
     //  /build/buildd/gdb-6.8/gdb/valops.c:2069: internal-error:
-    postCommand(_("set overload-resolution off"));
+    postCommand("set overload-resolution off");
     //postCommand(_("set demangle-style none"));
     // From the docs:
     //  Stop means reenter debugger if this signal happens (implies print).
@@ -4489,19 +4507,19 @@ bool GdbEngine::startGdb(const QStringList &args, const QString &gdb, const QStr
     // We need "print" as otherwise we would get no feedback whatsoever
     // Custom DebuggingHelper crashs which happen regularily for when accessing
     // uninitialized variables.
-    postCommand(_("handle SIGSEGV nopass stop print"));
+    postCommand("handle SIGSEGV nopass stop print");
 
     // This is useful to kill the inferior whenever gdb dies.
     //postCommand(_("handle SIGTERM pass nostop print"));
 
-    postCommand(_("set unwindonsignal on"));
-    //postCommand(_("pwd"));
-    postCommand(_("set width 0"));
-    postCommand(_("set height 0"));
+    postCommand("set unwindonsignal on");
+    //postCommand("pwd");
+    postCommand("set width 0");
+    postCommand("set height 0");
 
     if (m_isMacGdb) {
-        postCommand(_("-gdb-set inferior-auto-start-cfm off"));
-        postCommand(_("-gdb-set sharedLibrary load-rules "
+        postCommand("-gdb-set inferior-auto-start-cfm off");
+        postCommand("-gdb-set sharedLibrary load-rules "
             "dyld \".*libSystem.*\" all "
             "dyld \".*libauto.*\" all "
             "dyld \".*AppKit.*\" all "
@@ -4509,13 +4527,13 @@ bool GdbEngine::startGdb(const QStringList &args, const QString &gdb, const QStr
             "dyld \".*Foundation.*\" all "
             "dyld \".*CFDataFormatters.*\" all "
             "dyld \".*libobjc.*\" all "
-            "dyld \".*CarbonDataFormatters.*\" all"));
+            "dyld \".*CarbonDataFormatters.*\" all");
     }
 
     QString scriptFileName = theDebuggerStringSetting(GdbScriptFile);
     if (!scriptFileName.isEmpty()) {
         if (QFileInfo(scriptFileName).isReadable()) {
-            postCommand(_("source ") + scriptFileName);
+            postCommand("source " + scriptFileName.toLocal8Bit());
         } else {
             showMessageBox(QMessageBox::Warning,
             tr("Cannot find debugger initialization script"),
@@ -4527,10 +4545,10 @@ bool GdbEngine::startGdb(const QStringList &args, const QString &gdb, const QStr
     }
     if (m_gdbAdapter->dumperHandling() == AbstractGdbAdapter::DumperLoadedByGdbPreload
         && checkDebuggingHelpers()) {        
-        QString cmd = _("set environment ");
-        cmd += _(Debugger::Constants::Internal::LD_PRELOAD_ENV_VAR);
-        cmd += _c(' ');
-        cmd += manager()->qtDumperLibraryName();
+        QByteArray cmd = "set environment ";
+        cmd += Debugger::Constants::Internal::LD_PRELOAD_ENV_VAR;
+        cmd += ' ';
+        cmd += manager()->qtDumperLibraryName().toLocal8Bit();
         postCommand(cmd);
         m_debuggingHelperState = DebuggingHelperLoadTried;
     }
@@ -4601,20 +4619,17 @@ void GdbEngine::handleAdapterStarted()
 
 void GdbEngine::handleInferiorPrepared()
 {
-    const QString qtInstallPath = m_startParameters->qtInstallPath;
+    const QByteArray qtInstallPath = m_startParameters->qtInstallPath.toLocal8Bit();
     if (!qtInstallPath.isEmpty()) {
-        QString qtBuildPath;
+        QByteArray qtBuildPath;
 #if defined(Q_OS_WIN)
-        qtBuildPath = _("C:/qt-greenhouse/Trolltech/Code_less_create_more/Trolltech/Code_less_create_more/Troll/4.6/qt");
-        postCommand(_("set substitute-path %1 %2")
-                    .arg(qtBuildPath).arg(qtInstallPath));
-        qtBuildPath = _("C:/iwmake/build_mingw_opensource");
-        postCommand(_("set substitute-path %1 %2")
-                    .arg(qtBuildPath).arg(qtInstallPath));
+        qtBuildPath = "C:/qt-greenhouse/Trolltech/Code_less_create_more/Trolltech/Code_less_create_more/Troll/4.6/qt";
+        postCommand("set substitute-path " + qtBuildPath + ' ' + qtInstallPath);
+        qtBuildPath = "C:/iwmake/build_mingw_opensource";
+        postCommand("set substitute-path " + qtBuildPath + ' ' + qtInstallPath);
 #elif defined(Q_OS_UNIX) && !defined (Q_OS_MAC)
-        qtBuildPath = _("/var/tmp/qt-x11-src-4.6.0");
-        postCommand(_("set substitute-path %1 %2")
-                    .arg(qtBuildPath).arg(qtInstallPath));
+        qtBuildPath = "/var/tmp/qt-x11-src-4.6.0";
+        postCommand("set substitute-path " + qtBuildPath + ' ' + qtInstallPath);
 #endif
     }
 
diff --git a/src/plugins/debugger/gdb/gdbengine.h b/src/plugins/debugger/gdb/gdbengine.h
index 3a1bd2c945a..3aff5250469 100644
--- a/src/plugins/debugger/gdb/gdbengine.h
+++ b/src/plugins/debugger/gdb/gdbengine.h
@@ -201,7 +201,7 @@ private: ////////// Gdb Command Management //////////
         GdbCommandCallback callback;
         AdapterCallback adapterCallback;
         const char *callbackName;
-        QString command;
+        QByteArray command;
         QVariant cookie;
         QTime postTime;
     };
@@ -211,20 +211,20 @@ private: ////////// Gdb Command Management //////////
     // send and decrements on receipt, effectively preventing
     // watch model updates before everything is finished.
     void flushCommand(const GdbCommand &cmd);
-    void postCommand(const QString &command,
+    void postCommand(const QByteArray &command,
                      GdbCommandFlags flags,
                      GdbCommandCallback callback = 0,
                      const char *callbackName = 0,
                      const QVariant &cookie = QVariant());
-    void postCommand(const QString &command,
+    void postCommand(const QByteArray &command,
                      GdbCommandCallback callback = 0,
                      const char *callbackName = 0,
                      const QVariant &cookie = QVariant());
-    void postCommand(const QString &command,
+    void postCommand(const QByteArray &command,
                      AdapterCallback callback,
                      const char *callbackName,
                      const QVariant &cookie = QVariant());
-    void postCommand(const QString &command,
+    void postCommand(const QByteArray &command,
                      GdbCommandFlags flags,
                      AdapterCallback callback,
                      const char *callbackName,
@@ -458,7 +458,7 @@ private: ////////// View & Data Stuff //////////
     void setWatchDataType(WatchData &data, const GdbMi &mi);
     void setWatchDataDisplayedType(WatchData &data, const GdbMi &mi);
 
-    QSet<QString> m_processedNames;
+    QSet<QByteArray> m_processedNames;
     QMap<QString, QString> m_varToType;
 
 private: ////////// Dumper Management //////////
diff --git a/src/plugins/debugger/gdb/plaingdbadapter.cpp b/src/plugins/debugger/gdb/plaingdbadapter.cpp
index a4c0d34d86b..76f2aa10861 100644
--- a/src/plugins/debugger/gdb/plaingdbadapter.cpp
+++ b/src/plugins/debugger/gdb/plaingdbadapter.cpp
@@ -99,11 +99,13 @@ void PlainGdbAdapter::startAdapter()
 void PlainGdbAdapter::startInferior()
 {
     QTC_ASSERT(state() == InferiorStarting, qDebug() << state());
-    if (!startParameters().processArgs.isEmpty())
-        m_engine->postCommand(_("-exec-arguments ")
-            + startParameters().processArgs.join(_(" ")));
+    if (!startParameters().processArgs.isEmpty()) {
+        QString args = startParameters().processArgs.join(_(" "));
+        m_engine->postCommand("-exec-arguments " + args.toLocal8Bit());
+    }
     QFileInfo fi(startParameters().executable);
-    m_engine->postCommand(_("-file-exec-and-symbols \"%1\"").arg(fi.absoluteFilePath()),
+    QByteArray path = fi.absoluteFilePath().toLocal8Bit();
+    m_engine->postCommand("-file-exec-and-symbols \"" + path + '"',
         CB(handleFileExecAndSymbols));
 }
 
@@ -116,7 +118,7 @@ void PlainGdbAdapter::handleFileExecAndSymbols(const GdbResponse &response)
         // Note that successfully preloading the debugging helpers will
         // automatically load pthreads, so this will be unnecessary.
         if (m_engine->m_gdbVersion < 70000)
-            m_engine->postCommand(_("info target"), CB(handleInfoTarget));
+            m_engine->postCommand("info target", CB(handleInfoTarget));
 #endif
         emit inferiorPrepared();
     } else {
@@ -138,7 +140,7 @@ void PlainGdbAdapter::handleInfoTarget(const GdbResponse &response)
         if (needle.indexIn(msg) != -1) {
             m_engine->m_entryPoint =
                     "0x" + needle.cap(1).toLatin1().rightJustified(sizeof(void *) * 2, '0');
-            m_engine->postCommand(_("tbreak *0x") + needle.cap(1));
+            m_engine->postCommand("tbreak *0x" + needle.cap(1).toAscii());
             // Do nothing here - inferiorPrepared handles the sequencing.
         } else {
             emit inferiorStartFailed(_("Parsing start address failed"));
@@ -152,7 +154,7 @@ void PlainGdbAdapter::handleInfoTarget(const GdbResponse &response)
 void PlainGdbAdapter::startInferiorPhase2()
 {
     setState(InferiorRunningRequested);
-    m_engine->postCommand(_("-exec-run"), GdbEngine::RunRequest, CB(handleExecRun));
+    m_engine->postCommand("-exec-run", GdbEngine::RunRequest, CB(handleExecRun));
 }
 
 void PlainGdbAdapter::handleExecRun(const GdbResponse &response)
diff --git a/src/plugins/debugger/gdb/remotegdbadapter.cpp b/src/plugins/debugger/gdb/remotegdbadapter.cpp
index 01fd28053be..d3dd16273b6 100644
--- a/src/plugins/debugger/gdb/remotegdbadapter.cpp
+++ b/src/plugins/debugger/gdb/remotegdbadapter.cpp
@@ -155,21 +155,24 @@ void RemoteGdbAdapter::startInferior()
 {
     QTC_ASSERT(state() == InferiorStarting, qDebug() << state());
 
-    m_engine->postCommand(_("set architecture %1")
-        .arg(startParameters().remoteArchitecture));
-    m_engine->postCommand(_("set sysroot %1").arg(startParameters().sysRoot));
-    m_engine->postCommand(_("set solib-search-path %1").
-                          arg(QFileInfo(startParameters().dumperLibrary).path()));
-
-    if (!startParameters().processArgs.isEmpty())
-        m_engine->postCommand(_("-exec-arguments ")
-            + startParameters().processArgs.join(_(" ")));
+    m_engine->postCommand("set architecture "
+        + startParameters().remoteArchitecture.toLatin1());
+    m_engine->postCommand("set sysroot "
+        + startParameters().sysRoot.toLocal8Bit());
+    m_engine->postCommand("set solib-search-path "
+        + QFileInfo(startParameters().dumperLibrary).path().toLocal8Bit());
+
+    if (!startParameters().processArgs.isEmpty()) {
+        QString args = startParameters().processArgs.join(_(" "));
+        m_engine->postCommand("-exec-arguments " + args.toLocal8Bit());
+    }
 
-    m_engine->postCommand(_("set target-async on"), CB(handleSetTargetAsync));
+    m_engine->postCommand("set target-async on", CB(handleSetTargetAsync));
     QString x = startParameters().executable;
     QFileInfo fi(startParameters().executable);
     QString fileName = fi.absoluteFilePath();
-    m_engine->postCommand(_("-file-exec-and-symbols \"%1\"").arg(fileName),
+    m_engine->postCommand("-file-exec-and-symbols \""
+        + fileName.toLocal8Bit() + '"',
         CB(handleFileExecAndSymbols));
 }
 
@@ -191,7 +194,7 @@ void RemoteGdbAdapter::handleFileExecAndSymbols(const GdbResponse &response)
         //     (2) starts the remote application
         //     (3) stops the remote application (early, e.g. in the dynamic linker)
         QString channel = startParameters().remoteChannel;
-        m_engine->postCommand(_("target remote %1").arg(channel),
+        m_engine->postCommand("target remote " + channel.toLatin1(),
             CB(handleTargetRemote));
     } else {
         QString msg = tr("Starting remote executable failed:\n");
@@ -224,7 +227,7 @@ void RemoteGdbAdapter::startInferiorPhase2()
 
 void RemoteGdbAdapter::interruptInferior()
 {
-    m_engine->postCommand(_("-exec-interrupt"));
+    m_engine->postCommand("-exec-interrupt");
 }
 
 void RemoteGdbAdapter::shutdown()
diff --git a/src/plugins/debugger/gdb/termgdbadapter.cpp b/src/plugins/debugger/gdb/termgdbadapter.cpp
index 53378a42053..6b096b28301 100644
--- a/src/plugins/debugger/gdb/termgdbadapter.cpp
+++ b/src/plugins/debugger/gdb/termgdbadapter.cpp
@@ -129,7 +129,8 @@ void TermGdbAdapter::startInferior()
     QTC_ASSERT(state() == InferiorStarting, qDebug() << state());
     const qint64 attachedPID = m_stubProc.applicationPID();
     m_engine->handleInferiorPidChanged(attachedPID);
-    m_engine->postCommand(_("attach %1").arg(attachedPID), CB(handleStubAttached));
+    m_engine->postCommand("attach " + QByteArray::number(attachedPID),
+        CB(handleStubAttached));
 }
 
 void TermGdbAdapter::handleStubAttached(const GdbResponse &response)
@@ -140,7 +141,7 @@ void TermGdbAdapter::handleStubAttached(const GdbResponse &response)
         debugMessage(_("INFERIOR ATTACHED"));
         emit inferiorPrepared();
 #ifdef Q_OS_LINUX
-        m_engine->postCommand(_("-stack-list-frames 0 0"), CB(handleEntryPoint));
+        m_engine->postCommand("-stack-list-frames 0 0", CB(handleEntryPoint));
 #endif
     } else if (response.resultClass == GdbResultError) {
         QString msg = QString::fromLocal8Bit(response.data.findChild("msg").data());
diff --git a/src/plugins/debugger/gdb/trkgdbadapter.cpp b/src/plugins/debugger/gdb/trkgdbadapter.cpp
index 4d459a74fdf..2b972ac3266 100644
--- a/src/plugins/debugger/gdb/trkgdbadapter.cpp
+++ b/src/plugins/debugger/gdb/trkgdbadapter.cpp
@@ -1685,15 +1685,15 @@ void TrkGdbAdapter::handleCreateProcess(const TrkResult &result)
 
     logMessage(startMsg);
 
-    const QString fileName = m_symbolFile;
-    if (m_symbolFile.isEmpty()) {
+    const QByteArray symbolFile = m_symbolFile.toLocal8Bit();
+    if (symbolFile.isEmpty()) {
         logMessage(_("WARNING: No symbol file available."));
     } else {
-        m_engine->postCommand(_("add-symbol-file \"%1\" %2").arg(m_symbolFile)
-                              .arg(m_session.codeseg));
-        m_engine->postCommand(_("symbol-file \"%1\"").arg(m_symbolFile));
+        m_engine->postCommand("add-symbol-file \"" + symbolFile + "\" "
+            + QByteArray::number(m_session.codeseg));
+        m_engine->postCommand("symbol-file \"" + symbolFile + "\"");
     }
-    m_engine->postCommand(_("target remote ") + gdbServerName(),
+    m_engine->postCommand("target remote " + gdbServerName().toLatin1(),
         CB(handleTargetRemote));
 }
 
diff --git a/src/plugins/debugger/registerhandler.h b/src/plugins/debugger/registerhandler.h
index d7f16d04637..de3b8a3df8a 100644
--- a/src/plugins/debugger/registerhandler.h
+++ b/src/plugins/debugger/registerhandler.h
@@ -46,10 +46,10 @@ class Register
 {
 public:
     Register() : changed(true) {}
-    Register(QString const &name_) : name(name_), changed(true) {}
+    Register(QByteArray const &name_) : name(name_), changed(true) {}
 
 public:
-    QString name;
+    QByteArray name;
     QString value;
     bool changed;
 };
diff --git a/src/plugins/debugger/script/scriptengine.cpp b/src/plugins/debugger/script/scriptengine.cpp
index b8436f1084c..bcb397ca749 100644
--- a/src/plugins/debugger/script/scriptengine.cpp
+++ b/src/plugins/debugger/script/scriptengine.cpp
@@ -390,7 +390,7 @@ void ScriptEngine::attemptBreakpointSynchronization()
             updateNeeded = true;
         }
         if (data->bpNumber.isEmpty()) {
-            data->bpNumber = QString::number(index + 1);
+            data->bpNumber = QByteArray::number(index + 1);
             updateNeeded = true;
         }
         if (!data->fileName.isEmpty() && data->markerFileName.isEmpty()) {
@@ -560,7 +560,7 @@ void ScriptEngine::maybeBreakNow(bool byFunction)
         // we just run into a breakpoint
         //SDEBUG("RESOLVING BREAKPOINT AT " << fileName << lineNumber);
         BreakpointData *data = handler->at(index);
-        data->bpLineNumber = QString::number(lineNumber);
+        data->bpLineNumber = QByteArray::number(lineNumber);
         data->bpFileName = fileName;
         data->bpFuncName = functionName;
         data->markerLineNumber = lineNumber;
@@ -703,8 +703,8 @@ void ScriptEngine::updateSubItem(const WatchData &data0)
         while (it.hasNext()) {
             it.next();
             WatchData data1;
-            data1.iname = data.iname + "." + it.name();
-            data1.exp = it.name();
+            data1.iname = data.iname + "." + it.name().toLatin1();
+            data1.exp = it.name().toLatin1();
             data1.name = it.name();
             data1.scriptValue = it.value();
             if (manager()->watchHandler()->isExpandedIName(data1.iname))
diff --git a/src/plugins/debugger/watchhandler.cpp b/src/plugins/debugger/watchhandler.cpp
index 361b5863ba8..37d9dc7794c 100644
--- a/src/plugins/debugger/watchhandler.cpp
+++ b/src/plugins/debugger/watchhandler.cpp
@@ -224,7 +224,7 @@ void WatchData::setType(const QString &str, bool guessChildrenFromType)
 
 void WatchData::setAddress(const QString &str)
 {
-    addr = str;
+    addr = str.toLatin1();
 }
 
 QString WatchData::toString() const
@@ -349,15 +349,15 @@ WatchModel::WatchModel(WatchHandler *handler, WatchType type)
 
     switch (m_type) {
         case LocalsWatch:
-            m_root->iname = QLatin1String("local");
+            m_root->iname = "local";
             m_root->name = WatchHandler::tr("Locals");
             break;
         case WatchersWatch:
-            m_root->iname = QLatin1String("watch");
+            m_root->iname = "watch";
             m_root->name = WatchHandler::tr("Watchers");
             break;
         case TooltipsWatch:
-            m_root->iname = QLatin1String("tooltip");
+            m_root->iname = "tooltip";
             m_root->name = WatchHandler::tr("Tooltip");
             break;
     }
@@ -461,11 +461,11 @@ void WatchModel::destroyItem(WatchItem *item)
     delete item;
 }
 
-static QString parentName(const QString &iname)
+static QByteArray parentName(const QByteArray &iname)
 {
-    int pos = iname.lastIndexOf(QLatin1Char('.'));
+    int pos = iname.lastIndexOf('.');
     if (pos == -1)
-        return QString();
+        return QByteArray();
     return iname.left(pos);
 }
 
@@ -931,9 +931,9 @@ QVariant WatchModel::headerData(int section, Qt::Orientation orientation, int ro
     return QVariant(); 
 }
 
-struct IName : public QString
+struct IName : public QByteArray
 {
-    IName(const QString &iname) : QString(iname) {}
+    IName(const QByteArray &iname) : QByteArray(iname) {}
 };
 
 bool iNameLess(const QString &iname1, const QString &iname2)
@@ -1028,7 +1028,7 @@ void WatchModel::insertBulkData(const QList<WatchData> &list)
     //foreach (const WatchItem &data, list)
     //    qDebug() << "BULK: " << ++bulk << data.toString();
     QTC_ASSERT(!list.isEmpty(), return);
-    QString parentIName = parentName(list.at(0).iname);
+    QByteArray parentIName = parentName(list.at(0).iname);
     WatchItem *parent = findItem(parentIName, m_root);
     if (!parent) {
         WatchData parent;
@@ -1117,7 +1117,7 @@ void WatchModel::insertBulkData(const QList<WatchData> &list)
     dump();
 }
 
-WatchItem *WatchModel::findItem(const QString &iname, WatchItem *root) const
+WatchItem *WatchModel::findItem(const QByteArray &iname, WatchItem *root) const
 {
     if (root->iname == iname)
         return root;
@@ -1248,7 +1248,7 @@ void WatchHandler::insertBulkData(const QList<WatchData> &list)
 
     if (list.isEmpty())
         return;
-    QMap<QString, QList<WatchData> > hash;
+    QMap<QByteArray, QList<WatchData> > hash;
 
     foreach (const WatchData &data, list) {
         // we insert everything, including incomplete stuff
@@ -1259,7 +1259,7 @@ void WatchHandler::insertBulkData(const QList<WatchData> &list)
             qWarning("%s:%d: Attempt to bulk-insert invalid watch item: %s", __FILE__, __LINE__, qPrintable(data.toString()));
         }
     }
-    foreach (const QString &parentIName, hash.keys()) {
+    foreach (const QByteArray &parentIName, hash.keys()) {
         WatchModel *model = modelForIName(parentIName);
         QTC_ASSERT(model, return);
         model->insertBulkData(hash[parentIName]);
@@ -1271,7 +1271,7 @@ void WatchHandler::insertBulkData(const QList<WatchData> &list)
     }
 }
 
-void WatchHandler::removeData(const QString &iname)
+void WatchHandler::removeData(const QByteArray &iname)
 {
     WatchModel *model = modelForIName(iname);
     if (!model)
@@ -1287,21 +1287,21 @@ void WatchHandler::watchExpression()
         watchExpression(action->data().toString());
 }
 
-QString WatchHandler::watcherName(const QString &exp)
+QByteArray WatchHandler::watcherName(const QByteArray &exp)
 {
-    return QLatin1String("watch.") + QString::number(m_watcherNames[exp]);
+    return "watch." + QByteArray::number(m_watcherNames[exp]);
 }
 
 void WatchHandler::watchExpression(const QString &exp)
 {
     // FIXME: 'exp' can contain illegal characters
-    m_watcherNames[exp] = watcherCounter++;
     WatchData data;
-    data.exp = exp;
+    data.exp = exp.toLatin1();
     data.name = exp;
+    m_watcherNames[data.exp] = watcherCounter++;
     if (exp.isEmpty() || exp == watcherEditPlaceHolder())
         data.setAllUnneeded();
-    data.iname = watcherName(exp);
+    data.iname = watcherName(data.exp);
     IDebuggerEngine *engine = m_manager->currentEngine();
     if (engine && engine->isSynchroneous())
         m_manager->updateWatchData(data);
@@ -1392,8 +1392,9 @@ void WatchHandler::removeWatchExpression()
         removeWatchExpression(action->data().toString());
 }
 
-void WatchHandler::removeWatchExpression(const QString &exp)
+void WatchHandler::removeWatchExpression(const QString &exp0)
 {
+    QByteArray exp = exp0.toLatin1();
     MODEL_DEBUG("REMOVE WATCH: " << exp);
     m_watcherNames.remove(exp);
     foreach (WatchItem *item, m_watchers->rootItem()->children) {
@@ -1409,7 +1410,7 @@ void WatchHandler::updateWatchers()
 {
     //qDebug() << "UPDATE WATCHERS";
     // copy over all watchers and mark all watchers as incomplete
-    foreach (const QString &exp, m_watcherNames.keys()) {
+    foreach (const QByteArray &exp, m_watcherNames.keys()) {
         WatchData data;
         data.iname = watcherName(exp);
         data.setAllNeeded();
@@ -1423,7 +1424,7 @@ void WatchHandler::loadWatchers()
 {
     QVariant value = m_manager->sessionValue("Watchers");
     foreach (const QString &exp, value.toStringList())
-        m_watcherNames[exp] = watcherCounter++;
+        m_watcherNames[exp.toLatin1()] = watcherCounter++;
 
     //qDebug() << "LOAD WATCHERS: " << m_watchers;
     //reinitializeWatchersHelper();
@@ -1433,7 +1434,7 @@ QStringList WatchHandler::watchedExpressions() const
 {
     // Filter out invalid watchers.
     QStringList watcherNames;
-    QHashIterator<QString, int> it(m_watcherNames);
+    QHashIterator<QByteArray, int> it(m_watcherNames);
     while (it.hasNext()) {
         it.next();
         const QString &watcherName = it.key();
@@ -1487,7 +1488,7 @@ void WatchHandler::loadSessionData()
 {
     loadWatchers();
     loadTypeFormats();
-    foreach (const QString &exp, m_watcherNames.keys()) {
+    foreach (const QByteArray &exp, m_watcherNames.keys()) {
         WatchData data;
         data.iname = watcherName(exp);
         data.setAllUnneeded();
@@ -1508,19 +1509,19 @@ WatchModel *WatchHandler::model(WatchType type) const
     return 0;
 }
     
-WatchModel *WatchHandler::modelForIName(const QString &iname) const
+WatchModel *WatchHandler::modelForIName(const QByteArray &iname) const
 {
-    if (iname.startsWith(QLatin1String("local")))
+    if (iname.startsWith("local"))
         return m_locals;
-    if (iname.startsWith(QLatin1String("watch")))
+    if (iname.startsWith("watch"))
         return m_watchers;
-    if (iname.startsWith(QLatin1String("tooltip")))
+    if (iname.startsWith("tooltip"))
         return m_tooltips;
     QTC_ASSERT(false, qDebug() << "INAME: " << iname);
     return 0;
 }
 
-WatchData *WatchHandler::findItem(const QString &iname) const
+WatchData *WatchHandler::findItem(const QByteArray &iname) const
 {
     const WatchModel *model = modelForIName(iname);
     QTC_ASSERT(model, return 0);
diff --git a/src/plugins/debugger/watchhandler.h b/src/plugins/debugger/watchhandler.h
index 976a51f743d..6a56ca1a332 100644
--- a/src/plugins/debugger/watchhandler.h
+++ b/src/plugins/debugger/watchhandler.h
@@ -109,8 +109,8 @@ public:
 
     QString toString() const;
     QString toToolTip() const;
-    bool isLocal() const { return iname.startsWith(QLatin1String("local.")); }
-    bool isWatcher() const { return iname.startsWith(QLatin1String("watch.")); }
+    bool isLocal() const { return iname.startsWith("local."); }
+    bool isWatcher() const { return iname.startsWith("watch."); }
     bool isValid() const { return !iname.isEmpty(); }
     
     bool isEqual(const WatchData &other) const;
@@ -119,17 +119,17 @@ public:
     static QString shadowedName(const QString &name, int seen);
 
 public:
-    QString iname;        // internal name sth like 'local.baz.public.a'
-    QString exp;          // the expression
+    QByteArray iname;     // internal name sth like 'local.baz.public.a'
+    QByteArray exp;       // the expression
     QString name;         // displayed name
     QString value;        // displayed value
     QByteArray editvalue; // displayed value
     QString valuetooltip; // tooltip in value column
     QString type;         // type for further processing
-    QString displayedType; // displayed type (optional)
-    QString variable;     // name of internal Gdb variable if created
-    QString addr;         // displayed adress
-    QString saddr;        // stored address (pointer in container)
+    QString displayedType;// displayed type (optional)
+    QByteArray variable;  // name of internal Gdb variable if created
+    QByteArray addr;      // displayed adress
+    QByteArray saddr;     // stored address (pointer in container)
     QString framekey;     // key for type cache
     QScriptValue scriptValue; // if needed...
     bool hasChildren;
@@ -215,7 +215,7 @@ private:
 
     void insertData(const WatchData &data);
     void insertBulkData(const QList<WatchData> &data);
-    WatchItem *findItem(const QString &iname, WatchItem *root) const;
+    WatchItem *findItem(const QByteArray &iname, WatchItem *root) const;
     void reinitialize();
     void removeOutdated();
     void removeOutdatedHelper(WatchItem *item);
@@ -243,7 +243,7 @@ private:
     WatchHandler *m_handler;
     WatchType m_type;
     WatchItem *m_root;
-    QSet<QString> m_fetchTriggered;
+    QSet<QByteArray> m_fetchTriggered;
     // Part of the workaround to update the [+] marker when items
     // are added to a container.
     bool m_inExtraLayoutChanged;
@@ -256,7 +256,7 @@ class WatchHandler : public QObject
 public:
     explicit WatchHandler(DebuggerManager *manager);
     WatchModel *model(WatchType type) const;
-    WatchModel *modelForIName(const QString &data) const;
+    WatchModel *modelForIName(const QByteArray &iname) const;
 
 //public slots:
     void cleanup();
@@ -272,20 +272,20 @@ public:
 
     void insertData(const WatchData &data);
     void insertBulkData(const QList<WatchData> &data);
-    void removeData(const QString &iname);
-    WatchData *findItem(const QString &iname) const;
+    void removeData(const QByteArray &iname);
+    WatchData *findItem(const QByteArray &iname) const;
 
     void loadSessionData();
     void saveSessionData();
 
-    bool isDisplayedIName(const QString &iname) const
+    bool isDisplayedIName(const QByteArray &iname) const
         { return m_displayedINames.contains(iname); }
-    bool isExpandedIName(const QString &iname) const
+    bool isExpandedIName(const QByteArray &iname) const
         { return m_expandedINames.contains(iname); }
-    QSet<QString> expandedINames() const
+    QSet<QByteArray> expandedINames() const
         { return m_expandedINames; }
     QStringList watchedExpressions() const;
-    QHash<QString, int> watcherNames() const
+    QHash<QByteArray, int> watcherNames() const
         { return m_watcherNames; }
 
     static QString watcherEditPlaceHolder();
@@ -306,14 +306,14 @@ private:
     typedef QMap<QString, QPointer<QWidget> > EditWindows;
     EditWindows m_editWindows;
 
-    QHash<QString, int> m_watcherNames;
-    QString watcherName(const QString &exp);
+    QHash<QByteArray, int> m_watcherNames;
+    QByteArray watcherName(const QByteArray &exp);
     QHash<QString, int> m_typeFormats;
     QHash<QString, int> m_individualFormats;
 
     void setDisplayedIName(const QString &iname, bool on);
-    QSet<QString> m_expandedINames;  // those expanded in the treeview
-    QSet<QString> m_displayedINames; // those with "external" viewers
+    QSet<QByteArray> m_expandedINames;  // those expanded in the treeview
+    QSet<QByteArray> m_displayedINames; // those with "external" viewers
 
     WatchModel *m_locals;
     WatchModel *m_watchers;
diff --git a/src/plugins/debugger/watchutils.cpp b/src/plugins/debugger/watchutils.cpp
index c5c9aac5006..1aabf139f90 100644
--- a/src/plugins/debugger/watchutils.cpp
+++ b/src/plugins/debugger/watchutils.cpp
@@ -138,12 +138,11 @@ QDebug operator<<(QDebug d, const Scope &scope)
 namespace Debugger {
 namespace Internal {
 
-QString dotEscape(QString str)
+QByteArray dotEscape(QByteArray str)
 {
-    const QChar dot = QLatin1Char('.');
-    str.replace(QLatin1Char(' '), dot);
-    str.replace(QLatin1Char('\\'), dot);
-    str.replace(QLatin1Char('/'), dot);
+    str.replace(' ', '.');
+    str.replace('\\', '.');
+    str.replace('/', '.');
     return str;
 }
 
@@ -275,15 +274,6 @@ bool isCharPointerType(const QString &type)
         || type == QLatin1String("char const *");
 }
 
-bool isAccessSpecifier(const QString &str)
-{
-    static const QStringList items = QStringList()
-        << QLatin1String("private")
-        << QLatin1String("protected")
-        << QLatin1String("public");
-    return items.contains(str);
-}
-
 bool startsWithDigit(const QString &str)
 {
     return !str.isEmpty() && str.at(0).isDigit();
@@ -1270,13 +1260,13 @@ void QtDumperHelper::evaluationParameters(const WatchData &data,
     inBuffer->clear();
     inBuffer->append(outertype.toUtf8());
     inBuffer->append('\0');
-    inBuffer->append(data.iname.toUtf8());
+    inBuffer->append(data.iname);
     inBuffer->append('\0');
-    inBuffer->append(data.exp.toUtf8());
+    inBuffer->append(data.exp);
     inBuffer->append('\0');
     inBuffer->append(inner.toUtf8());
     inBuffer->append('\0');
-    inBuffer->append(data.iname.toUtf8());
+    inBuffer->append(data.iname);
     inBuffer->append('\0');
 
     if (debug)
@@ -1361,6 +1351,17 @@ static bool gdbMiGetStringValue(QString *target,
     return true;
 }
 
+static bool gdbMiGetByteArrayValue(QByteArray *target,
+                             const GdbMi &node,
+                             const char *child,
+                             const char *encodingChild = 0)
+{
+    QString str;
+    const bool success = gdbMiGetStringValue(&str, node, child, encodingChild);
+    *target = str.toLatin1();
+    return success;
+}
+
 static bool gdbMiGetBoolValue(bool *target,
                              const GdbMi &node,
                              const char *child)
@@ -1377,7 +1378,8 @@ static bool gdbMiGetBoolValue(bool *target,
  *  (next level only, it is not further inherited). For example, the root item
  * can provide a "childtype" node that specifies the type of the children. */
 
-struct GdbMiRecursionContext {
+struct GdbMiRecursionContext
+{
     GdbMiRecursionContext(int recursionLevelIn = 0) :
             recursionLevel(recursionLevelIn), childNumChild(-1), childIndex(0) {}
 
@@ -1385,7 +1387,7 @@ struct GdbMiRecursionContext {
     int childNumChild;
     int childIndex;
     QString childType;
-    QString parentIName;
+    QByteArray parentIName;
 };
 
 static void gbdMiToWatchData(const GdbMi &root,
@@ -1396,16 +1398,19 @@ static void gbdMiToWatchData(const GdbMi &root,
         qDebug() << Q_FUNC_INFO << '\n' << root.toString(false, 0);
     WatchData w;    
     QString v;
+    QByteArray b;
     // Check for name/iname and use as expression default
     if (ctx.recursionLevel == 0) {
         // parents have only iname, from which name is derived
-        if (!gdbMiGetStringValue(&w.iname, root, "iname"))
+        QString iname;
+        if (!gdbMiGetStringValue(&iname, root, "iname"))
             qWarning("Internal error: iname missing");
-        w.name = w.iname;
+        w.iname = iname.toLatin1();
+        w.name = iname;
         const int lastDotPos = w.name.lastIndexOf(QLatin1Char('.'));
         if (lastDotPos != -1)
             w.name.remove(0, lastDotPos + 1);
-        w.exp = w.name;
+        w.exp = w.name.toLatin1();
     } else {
         // Children can have a 'name' attribute. If missing, assume array index
         // For display purposes, it can be overridden by "key"
@@ -1414,8 +1419,8 @@ static void gbdMiToWatchData(const GdbMi &root,
         }
         // Set iname
         w.iname = ctx.parentIName;
-        w.iname += QLatin1Char('.');
-        w.iname += w.name;
+        w.iname += '.';
+        w.iname += w.name.toLatin1();
         // Key?
         QString key;
         if (gdbMiGetStringValue(&key, root, "key", "keyencoded")) {
@@ -1427,12 +1432,12 @@ static void gbdMiToWatchData(const GdbMi &root,
         qWarning("%s\n", qPrintable(msg));
     }
     gdbMiGetStringValue(&w.displayedType, root, "displayedtype");
-    if (gdbMiGetStringValue(&v, root, "editvalue"))
-        w.editvalue = v.toLatin1();
-    if (gdbMiGetStringValue(&v, root, "exp"))
-        w.exp = v;
-    gdbMiGetStringValue(&w.addr, root, "addr");
-    gdbMiGetStringValue(&w.saddr, root, "saddr");
+    if (gdbMiGetByteArrayValue(&b, root, "editvalue"))
+        w.editvalue = b;
+    if (gdbMiGetByteArrayValue(&b, root, "exp"))
+        w.exp = b;
+    gdbMiGetByteArrayValue(&w.addr, root, "addr");
+    gdbMiGetByteArrayValue(&w.saddr, root, "saddr");
     gdbMiGetBoolValue(&w.valueEnabled, root, "valueenabled");    
     gdbMiGetBoolValue(&w.valueEditable, root, "valueeditable");
     if (gdbMiGetStringValue(&v, root, "valuetooltip", "valuetooltipencoded"))
diff --git a/src/plugins/debugger/watchutils.h b/src/plugins/debugger/watchutils.h
index 477eed2d33a..d880359fca3 100644
--- a/src/plugins/debugger/watchutils.h
+++ b/src/plugins/debugger/watchutils.h
@@ -55,7 +55,7 @@ namespace Internal {
 class WatchData;
 class GdbMi;
 
-QString dotEscape(QString str);
+QByteArray dotEscape(QByteArray str);
 QString currentTime();
 bool isSkippableFunction(const QString &funcName, const QString &fileName);
 bool isLeavableFunction(const QString &funcName, const QString &fileName);
@@ -71,7 +71,6 @@ bool hasSideEffects(const QString &exp);
 bool isKeyWord(const QString &exp);
 bool isPointerType(const QString &type);
 bool isCharPointerType(const QString &type);
-bool isAccessSpecifier(const QString &str);
 bool startsWithDigit(const QString &str);
 QString stripPointerType(QString type);
 QString gdbQuoteTypes(const QString &type);
-- 
GitLab