diff --git a/src/plugins/debugger/debugger.qbs b/src/plugins/debugger/debugger.qbs
index 0560b5b4730a3a6428b601b5ac0041dac772b09a..cdf29d156cb8f0205480d31c5bf18119537f4879 100644
--- a/src/plugins/debugger/debugger.qbs
+++ b/src/plugins/debugger/debugger.qbs
@@ -109,7 +109,6 @@ QtcPlugin {
             "coregdbadapter.cpp", "coregdbadapter.h",
             "gdbengine.cpp", "gdbengine.h",
             "gdboptionspage.cpp", "gdboptionspage.h",
-            "gdbprocess.cpp", "gdbprocess.h",
             "gdbplainengine.cpp", "gdbplainengine.h",
             "remotegdbserveradapter.cpp", "remotegdbserveradapter.h",
             "startgdbserverdialog.cpp", "startgdbserverdialog.h",
diff --git a/src/plugins/debugger/debuggerengine.cpp b/src/plugins/debugger/debuggerengine.cpp
index 8e2ba1835efff56ca9c373423151a54aa9b175a3..15b70ed9bedad22fdc88062a0f0b7b12b3579f59 100644
--- a/src/plugins/debugger/debuggerengine.cpp
+++ b/src/plugins/debugger/debuggerengine.cpp
@@ -551,6 +551,9 @@ void DebuggerEngine::startDebugger(DebuggerRunControl *runControl)
     if (!d->m_runParameters.environment.size())
         d->m_runParameters.environment = Utils::Environment();
 
+    if (isNativeMixedActive())
+        d->m_runParameters.environment.set(QLatin1String("QV4_FORCE_INTERPRETER"), QLatin1String("1"));
+
     action(OperateByInstruction)->setEnabled(hasCapability(DisassemblerCapability));
 
     QTC_ASSERT(state() == DebuggerNotReady || state() == DebuggerFinished,
diff --git a/src/plugins/debugger/gdb/attachgdbadapter.cpp b/src/plugins/debugger/gdb/attachgdbadapter.cpp
index f090b99ff083e2c6f8c3bfd787b85db1d1b57bdc..87f16d648afed5bfc6244a8e166f4150c56bf650 100644
--- a/src/plugins/debugger/gdb/attachgdbadapter.cpp
+++ b/src/plugins/debugger/gdb/attachgdbadapter.cpp
@@ -58,9 +58,9 @@ void GdbAttachEngine::setupEngine()
     showMessage(_("TRYING TO START ADAPTER"));
 
     if (!runParameters().workingDirectory.isEmpty())
-        m_gdbProc->setWorkingDirectory(runParameters().workingDirectory);
+        m_gdbProc.setWorkingDirectory(runParameters().workingDirectory);
     if (runParameters().environment.size())
-        m_gdbProc->setEnvironment(runParameters().environment.toStringList());
+        m_gdbProc.setEnvironment(runParameters().environment);
 
     startGdb();
 }
diff --git a/src/plugins/debugger/gdb/attachgdbadapter.h b/src/plugins/debugger/gdb/attachgdbadapter.h
index 5f1bf28234ab453dde609cb111a807f4034f8088..a9ab9b5bd2c158f74ef7425b245157e798209512 100644
--- a/src/plugins/debugger/gdb/attachgdbadapter.h
+++ b/src/plugins/debugger/gdb/attachgdbadapter.h
@@ -32,7 +32,6 @@
 #define DEBUGGER_ATTACHGDBADAPTER_H
 
 #include "gdbengine.h"
-#include "gdbprocess.h"
 
 namespace Debugger {
 namespace Internal {
diff --git a/src/plugins/debugger/gdb/gdb.pri b/src/plugins/debugger/gdb/gdb.pri
index 1a9c3ddcee50bd37f73bc0570db63ae10f381845..00a6b0f007294904fae172449bf5c517574d0113 100644
--- a/src/plugins/debugger/gdb/gdb.pri
+++ b/src/plugins/debugger/gdb/gdb.pri
@@ -6,7 +6,6 @@ HEADERS += \
     $$PWD/termgdbadapter.h \
     $$PWD/remotegdbserveradapter.h \
     $$PWD/gdbplainengine.h \
-    $$PWD/gdbprocess.h \
     $$PWD/startgdbserverdialog.h
 
 SOURCES += \
@@ -16,6 +15,5 @@ SOURCES += \
     $$PWD/coregdbadapter.cpp \
     $$PWD/termgdbadapter.cpp \
     $$PWD/remotegdbserveradapter.cpp \
-    $$PWD/gdbprocess.cpp \
     $$PWD/gdbplainengine.cpp \
     $$PWD/startgdbserverdialog.cpp
diff --git a/src/plugins/debugger/gdb/gdbengine.cpp b/src/plugins/debugger/gdb/gdbengine.cpp
index ff6cc8821c26a681f4695a74cde12cbb8798c25f..4a9a3bbeeb57d589b8fd14daef707e57e241634a 100644
--- a/src/plugins/debugger/gdb/gdbengine.cpp
+++ b/src/plugins/debugger/gdb/gdbengine.cpp
@@ -82,6 +82,7 @@
 #include <QBuffer>
 #include <QDirIterator>
 #include <QMessageBox>
+#include <QProcess>
 #include <QPushButton>
 #include <QTemporaryFile>
 
@@ -241,7 +242,6 @@ GdbEngine::GdbEngine(const DebuggerRunParameters &startParameters)
     m_terminalTrap = startParameters.useTerminal;
     m_fullStartDone = false;
     m_systemDumpersLoaded = false;
-    m_gdbProc = new GdbProcess(this);
 
     m_debugInfoTaskHandler = new DebugInfoTaskHandler(this);
     //ExtensionSystem::PluginManager::addObject(m_debugInfoTaskHandler);
@@ -282,7 +282,7 @@ QString GdbEngine::errorMessage(QProcess::ProcessError error)
             return tr("The gdb process failed to start. Either the "
                 "invoked program \"%1\" is missing, or you may have insufficient "
                 "permissions to invoke the program.\n%2")
-                .arg(m_gdb, m_gdbProc->errorString());
+                .arg(m_gdb, m_gdbProc.errorString());
         case QProcess::Crashed:
             if (targetState() == DebuggerFinished)
                 return tr("The gdb process crashed some time after starting "
@@ -763,7 +763,7 @@ void GdbEngine::handleResponse(const QByteArray &buff)
 
 void GdbEngine::readGdbStandardError()
 {
-    QByteArray err = m_gdbProc->readAllStandardError();
+    QByteArray err = m_gdbProc.readAllStandardError();
     showMessage(_("UNEXPECTED GDB STDERR: " + err));
     if (err == "Undefined command: \"bb\".  Try \"help\".\n")
         return;
@@ -779,7 +779,7 @@ void GdbEngine::readGdbStandardOutput()
     int newstart = 0;
     int scan = m_inbuffer.size();
 
-    QByteArray out = m_gdbProc->readAllStandardOutput();
+    QByteArray out = m_gdbProc.readAllStandardOutput();
     m_inbuffer.append(out);
 
     // This can trigger when a dialog starts a nested event loop.
@@ -961,7 +961,7 @@ void GdbEngine::flushCommand(const DebuggerCommand &cmd0)
         return;
     }
 
-    QTC_ASSERT(m_gdbProc->state() == QProcess::Running, return);
+    QTC_ASSERT(m_gdbProc.state() == QProcess::Running, return);
 
     const int token = ++currentToken();
 
@@ -1039,7 +1039,7 @@ void GdbEngine::commandTimeout()
         if (mb->exec() == QMessageBox::Ok) {
             showMessage(_("KILLING DEBUGGER AS REQUESTED BY USER"));
             // This is an undefined state, so we just pull the emergency brake.
-            m_gdbProc->kill();
+            m_gdbProc.kill();
             notifyEngineShutdownFailed();
         } else {
             showMessage(_("CONTINUE DEBUGGER AS REQUESTED BY USER"));
@@ -1908,9 +1908,9 @@ void GdbEngine::notifyAdapterShutdownOk()
 {
     CHECK_STATE(EngineShutdownRequested);
     showMessage(_("INITIATE GDBENGINE SHUTDOWN IN STATE %1, PROC: %2")
-        .arg(lastGoodState()).arg(m_gdbProc->state()));
+        .arg(lastGoodState()).arg(m_gdbProc.state()));
     m_commandsDoneCallback = 0;
-    switch (m_gdbProc->state()) {
+    switch (m_gdbProc.state()) {
     case QProcess::Running: {
         if (runParameters().closeMode == KillAndExitMonitorAtClose)
             postCommand("monitor exit");
@@ -1926,7 +1926,7 @@ void GdbEngine::notifyAdapterShutdownOk()
         break;
     case QProcess::Starting:
         showMessage(_("GDB NOT REALLY RUNNING; KILLING IT"));
-        m_gdbProc->kill();
+        m_gdbProc.kill();
         notifyEngineShutdownFailed();
         break;
     }
@@ -1943,7 +1943,7 @@ void GdbEngine::handleGdbExit(const DebuggerResponse &response)
             QString::fromLocal8Bit(response.data["msg"].data()));
         qDebug() << (_("GDB WON'T EXIT (%1); KILLING IT").arg(msg));
         showMessage(_("GDB WON'T EXIT (%1); KILLING IT").arg(msg));
-        m_gdbProc->kill();
+        m_gdbProc.kill();
         notifyEngineShutdownFailed();
     }
 }
@@ -4073,7 +4073,7 @@ void GdbEngine::startGdb(const QStringList &args)
     foreach (int test, m_testCases)
         showMessage(_("ENABLING TEST CASE: " + QByteArray::number(test)));
 
-    m_gdbProc->disconnect(); // From any previous runs
+    m_gdbProc.disconnect(); // From any previous runs
 
     const DebuggerRunParameters &rp = runParameters();
     m_gdb = gdbBinary(rp);
@@ -4091,15 +4091,18 @@ void GdbEngine::startGdb(const QStringList &args)
         gdbArgs << _("-n");
     gdbArgs += args;
 
-    connect(m_gdbProc, &GdbProcess::error, this, &GdbEngine::handleGdbError);
-    connect(m_gdbProc, &GdbProcess::finished, this, &GdbEngine::handleGdbFinished);
-    connect(m_gdbProc, &GdbProcess::readyReadStandardOutput, this, &GdbEngine::readGdbStandardOutput);
-    connect(m_gdbProc, &GdbProcess::readyReadStandardError, this, &GdbEngine::readGdbStandardError);
+    connect(&m_gdbProc, static_cast<void (QProcess::*)(QProcess::ProcessError)>(&QProcess::error),
+            this, &GdbEngine::handleGdbError);
+    connect(&m_gdbProc,  static_cast<void (QProcess::*)(int, QProcess::ExitStatus)>(&QProcess::finished),
+            this, &GdbEngine::handleGdbFinished);
+    connect(&m_gdbProc, &QtcProcess::readyReadStandardOutput, this, &GdbEngine::readGdbStandardOutput);
+    connect(&m_gdbProc, &QtcProcess::readyReadStandardError, this, &GdbEngine::readGdbStandardError);
 
     showMessage(_("STARTING ") + m_gdb + _(" ") + gdbArgs.join(QLatin1Char(' ')));
-    m_gdbProc->start(m_gdb, gdbArgs);
+    m_gdbProc.setCommand(m_gdb, QtcProcess::joinArgs(gdbArgs));
+    m_gdbProc.start();
 
-    if (!m_gdbProc->waitForStarted()) {
+    if (!m_gdbProc.waitForStarted()) {
         handleGdbStartFailed();
         const QString msg = errorMessage(QProcess::FailedToStart);
         handleAdapterStartFailed(msg);
@@ -4328,8 +4331,7 @@ void GdbEngine::abortDebugger()
     if (targetState() == DebuggerFinished) {
         // We already tried. Try harder.
         showMessage(_("ABORTING DEBUGGER. SECOND TIME."));
-        QTC_ASSERT(m_gdbProc, return);
-        m_gdbProc->kill();
+        m_gdbProc.kill();
     } else {
         // Be friendly the first time. This will change targetState().
         showMessage(_("ABORTING DEBUGGER. FIRST TIME."));
@@ -4501,7 +4503,7 @@ void GdbEngine::handleAdapterCrashed(const QString &msg)
         notifyEngineIll();
 
     // No point in being friendly here ...
-    m_gdbProc->kill();
+    m_gdbProc.kill();
 
     if (!msg.isEmpty())
         AsynchronousMessageBox::critical(tr("Adapter crashed"), msg);
@@ -4586,7 +4588,7 @@ bool GdbEngine::attemptQuickStart() const
 
 void GdbEngine::write(const QByteArray &data)
 {
-    m_gdbProc->write(data);
+    m_gdbProc.write(data);
 }
 
 bool GdbEngine::prepareCommand()
diff --git a/src/plugins/debugger/gdb/gdbengine.h b/src/plugins/debugger/gdb/gdbengine.h
index 88caf6f2ac030d7bb41444e63b553e8a77879639..15450ced54d7ef762400abb8ca19ef5c75e78e44 100644
--- a/src/plugins/debugger/gdb/gdbengine.h
+++ b/src/plugins/debugger/gdb/gdbengine.h
@@ -41,6 +41,7 @@
 #include <coreplugin/id.h>
 
 #include <projectexplorer/devicesupport/idevice.h>
+#include <utils/qtcprocess.h>
 
 #include <QProcess>
 #include <QTextCodec>
@@ -474,7 +475,9 @@ protected:
     bool prepareCommand();
     void interruptLocalInferior(qint64 pid);
 
-    GdbProcess *m_gdbProc;
+protected:
+    Utils::QtcProcess m_gdbProc;
+    QString m_errorString;
     ProjectExplorer::DeviceProcessSignalOperation::Ptr m_signalOperation;
 };
 
diff --git a/src/plugins/debugger/gdb/gdbplainengine.cpp b/src/plugins/debugger/gdb/gdbplainengine.cpp
index a22a4d47a3b88805f9f7f6326c5c4fbc6dc47cf9..1980f9c32b52eb342a2fcdf5893db899cb5b369a 100644
--- a/src/plugins/debugger/gdb/gdbplainengine.cpp
+++ b/src/plugins/debugger/gdb/gdbplainengine.cpp
@@ -29,7 +29,6 @@
 ****************************************************************************/
 
 #include "gdbplainengine.h"
-#include "gdbprocess.h"
 
 #include <debugger/debuggeractions.h>
 #include <debugger/debuggercore.h>
@@ -127,9 +126,10 @@ void GdbPlainEngine::setupEngine()
     gdbArgs.append(_("--tty=") + m_outputCollector.serverName());
 
     if (!runParameters().workingDirectory.isEmpty())
-        m_gdbProc->setWorkingDirectory(runParameters().workingDirectory);
-    if (runParameters().environment.size())
-        m_gdbProc->setEnvironment(runParameters().environment.toStringList());
+        m_gdbProc.setWorkingDirectory(runParameters().workingDirectory);
+    Utils::Environment env = runParameters().environment;
+    if (env.size())
+        m_gdbProc.setEnvironment(env);
 
     startGdb(gdbArgs);
 }
diff --git a/src/plugins/debugger/gdb/gdbprocess.cpp b/src/plugins/debugger/gdb/gdbprocess.cpp
deleted file mode 100644
index 7115923b6a1cfa287d4d272d249fa28e83c70b08..0000000000000000000000000000000000000000
--- a/src/plugins/debugger/gdb/gdbprocess.cpp
+++ /dev/null
@@ -1,134 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2015 The Qt Company Ltd.
-** Contact: http://www.qt.io/licensing
-**
-** This file is part of Qt Creator.
-**
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company.  For licensing terms and
-** conditions see http://www.qt.io/terms-conditions.  For further information
-** use the contact form at http://www.qt.io/contact-us.
-**
-** GNU Lesser General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU Lesser
-** General Public License version 2.1 or version 3 as published by the Free
-** Software Foundation and appearing in the file LICENSE.LGPLv21 and
-** LICENSE.LGPLv3 included in the packaging of this file.  Please review the
-** following information to ensure the GNU Lesser General Public License
-** requirements will be met: https://www.gnu.org/licenses/lgpl.html and
-** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
-**
-** In addition, as a special exception, The Qt Company gives you certain additional
-** rights.  These rights are described in The Qt Company LGPL Exception
-** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
-**
-****************************************************************************/
-
-#include "gdbprocess.h"
-
-#include <debugger/debuggerconstants.h>
-#include <debugger/debuggercore.h>
-#include <debugger/procinterrupt.h>
-
-namespace Debugger {
-namespace Internal {
-
-GdbProcess::GdbProcess(QObject *parent) : QObject(parent)
-{
-    connect(&m_gdbProc, SIGNAL(error(QProcess::ProcessError)),
-            this, SIGNAL(error(QProcess::ProcessError)));
-    connect(&m_gdbProc, SIGNAL(finished(int,QProcess::ExitStatus)),
-            this, SIGNAL(finished(int,QProcess::ExitStatus)));
-    connect(&m_gdbProc, SIGNAL(readyReadStandardOutput()),
-            this, SIGNAL(readyReadStandardOutput()));
-    connect(&m_gdbProc, SIGNAL(readyReadStandardError()),
-            this, SIGNAL(readyReadStandardError()));
-}
-
-QByteArray GdbProcess::readAllStandardOutput()
-{
-    return m_gdbProc.readAllStandardOutput();
-}
-
-QByteArray GdbProcess::readAllStandardError()
-{
-    return m_gdbProc.readAllStandardError();
-}
-
-void GdbProcess::start(const QString &cmd, const QStringList &args)
-{
-    m_gdbProc.setCommand(cmd, Utils::QtcProcess::joinArgs(args));
-    m_gdbProc.start();
-}
-
-bool GdbProcess::waitForStarted()
-{
-    return m_gdbProc.waitForStarted();
-}
-
-qint64 GdbProcess::write(const QByteArray &data)
-{
-    return m_gdbProc.write(data);
-}
-
-void GdbProcess::kill()
-{
-    m_gdbProc.kill();
-}
-
-bool GdbProcess::interrupt()
-{
-    long pid = Utils::qPidToPid(m_gdbProc.pid());
-    return interruptProcess(pid, GdbEngineType, &m_errorString);
-}
-
-void GdbProcess::setUseCtrlCStub(bool enable)
-{
-    m_gdbProc.setUseCtrlCStub(enable);
-}
-
-void GdbProcess::winInterruptByCtrlC()
-{
-    m_gdbProc.interrupt();
-}
-
-QProcess::ProcessState GdbProcess::state() const
-{
-    return m_gdbProc.state();
-}
-
-QString GdbProcess::errorString() const
-{
-    return m_errorString + m_gdbProc.errorString();
-}
-
-QProcessEnvironment GdbProcess::processEnvironment() const
-{
-    return m_gdbProc.processEnvironment();
-}
-
-void GdbProcess::setProcessEnvironment(const QProcessEnvironment &env)
-{
-    m_gdbProc.setProcessEnvironment(env);
-}
-
-void GdbProcess::setEnvironment(const QStringList &env_)
-{
-    QStringList env = env_;
-    if (isNativeMixedActive())
-        env.append(QLatin1String("QV4_FORCE_INTERPRETER=1")); // FIXME: REMOVE!
-    m_gdbProc.setEnvironment(Utils::Environment(env));
-}
-
-void GdbProcess::setWorkingDirectory(const QString &dir)
-{
-    m_gdbProc.setWorkingDirectory(dir);
-}
-
-} // namespace Internal
-} // namespace Debugger
-
diff --git a/src/plugins/debugger/gdb/gdbprocess.h b/src/plugins/debugger/gdb/gdbprocess.h
deleted file mode 100644
index 4b8f3f276610661154abc29f6b45799b9a96db3b..0000000000000000000000000000000000000000
--- a/src/plugins/debugger/gdb/gdbprocess.h
+++ /dev/null
@@ -1,79 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2015 The Qt Company Ltd.
-** Contact: http://www.qt.io/licensing
-**
-** This file is part of Qt Creator.
-**
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company.  For licensing terms and
-** conditions see http://www.qt.io/terms-conditions.  For further information
-** use the contact form at http://www.qt.io/contact-us.
-**
-** GNU Lesser General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU Lesser
-** General Public License version 2.1 or version 3 as published by the Free
-** Software Foundation and appearing in the file LICENSE.LGPLv21 and
-** LICENSE.LGPLv3 included in the packaging of this file.  Please review the
-** following information to ensure the GNU Lesser General Public License
-** requirements will be met: https://www.gnu.org/licenses/lgpl.html and
-** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
-**
-** In addition, as a special exception, The Qt Company gives you certain additional
-** rights.  These rights are described in The Qt Company LGPL Exception
-** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
-**
-****************************************************************************/
-
-#ifndef GDBPROCESS_H
-#define GDBPROCESS_H
-
-#include <utils/qtcprocess.h>
-
-namespace Debugger {
-namespace Internal {
-
-class GdbProcess : public QObject
-{
-    Q_OBJECT
-
-public:
-    explicit GdbProcess(QObject *parent = 0);
-
-    QByteArray readAllStandardOutput();
-    QByteArray readAllStandardError();
-
-    void start(const QString &cmd, const QStringList &args);
-    bool waitForStarted();
-    qint64 write(const QByteArray &data);
-    void kill();
-    bool interrupt();
-    void setUseCtrlCStub(bool enable);
-    void winInterruptByCtrlC();
-
-    QProcess::ProcessState state() const;
-    QString errorString() const;
-
-    QProcessEnvironment processEnvironment() const;
-    void setProcessEnvironment(const QProcessEnvironment &env);
-    void setEnvironment(const QStringList &env);
-    void setWorkingDirectory(const QString &dir);
-
-signals:
-    void error(QProcess::ProcessError);
-    void finished(int exitCode, QProcess::ExitStatus exitStatus);
-    void readyReadStandardError();
-    void readyReadStandardOutput();
-
-private:
-    Utils::QtcProcess m_gdbProc;
-    QString m_errorString;
-};
-
-} // namespace Internal
-} // namespace Debugger
-
-#endif // GDBPROCESS_H
diff --git a/src/plugins/debugger/gdb/remotegdbserveradapter.cpp b/src/plugins/debugger/gdb/remotegdbserveradapter.cpp
index c908584e6305a9d8340ed2358c6d91205eb1afbc..9f1bed9d6a043023e693f2a4f365f89cbac75e94 100644
--- a/src/plugins/debugger/gdb/remotegdbserveradapter.cpp
+++ b/src/plugins/debugger/gdb/remotegdbserveradapter.cpp
@@ -30,13 +30,12 @@
 
 #include "remotegdbserveradapter.h"
 
-#include "gdbprocess.h"
-
 #include <debugger/debuggeractions.h>
 #include <debugger/debuggercore.h>
 #include <debugger/debuggerprotocol.h>
 #include <debugger/debuggerstartparameters.h>
 #include <debugger/debuggerstringutils.h>
+#include <debugger/procinterrupt.h>
 
 #include <coreplugin/messagebox.h>
 
@@ -63,7 +62,7 @@ GdbRemoteServerEngine::GdbRemoteServerEngine(const DebuggerRunParameters &startP
     : GdbEngine(startParameters), m_startAttempted(false)
 {
     if (HostOsInfo::isWindowsHost())
-        m_gdbProc->setUseCtrlCStub(startParameters.useCtrlCStub); // This is only set for QNX/BlackBerry
+        m_gdbProc.setUseCtrlCStub(startParameters.useCtrlCStub); // This is only set for QNX/BlackBerry
 
     connect(&m_uploadProc, static_cast<void (QProcess::*)(QProcess::ProcessError)>(&QProcess::error),
             this, &GdbRemoteServerEngine::uploadProcError);
@@ -91,9 +90,9 @@ void GdbRemoteServerEngine::setupEngine()
         m_uploadProc.waitForStarted();
     }
     if (!runParameters().workingDirectory.isEmpty())
-        m_gdbProc->setWorkingDirectory(runParameters().workingDirectory);
+        m_gdbProc.setWorkingDirectory(runParameters().workingDirectory);
     if (runParameters().environment.size())
-        m_gdbProc->setEnvironment(runParameters().environment.toStringList());
+        m_gdbProc.setEnvironment(runParameters().environment);
 
     if (runParameters().remoteSetupNeeded)
         notifyEngineRequestRemoteSetup();
@@ -435,9 +434,10 @@ void GdbRemoteServerEngine::interruptInferior2()
         postCommand("-exec-interrupt", GdbEngine::Immediate,
             CB(handleInterruptInferior));
     } else if (m_isQnxGdb && HostOsInfo::isWindowsHost()) {
-        m_gdbProc->winInterruptByCtrlC();
+        m_gdbProc.interrupt();
     } else {
-        bool ok = m_gdbProc->interrupt();
+        long pid = Utils::qPidToPid(m_gdbProc.pid());
+        bool ok = interruptProcess(pid, GdbEngineType, &m_errorString);
         if (!ok) {
             // FIXME: Extra state needed?
             showMessage(_("NOTE: INFERIOR STOP NOT POSSIBLE"));