forked from qt-creator/qt-creator
Debugger: Move plugin class definition to .cpp
Change-Id: I82327b20fb3bd970fe66b43228ca2f014c877f12 Reviewed-by: Jarek Kobus <jaroslaw.kobus@qt.io>
This commit is contained in:
@@ -47,7 +47,7 @@ add_qtc_plugin(Debugger
|
||||
debuggeritemmanager.cpp debuggeritemmanager.h
|
||||
debuggerkitaspect.cpp debuggerkitaspect.h
|
||||
debuggermainwindow.cpp debuggermainwindow.h
|
||||
debuggerplugin.cpp debuggerplugin.h
|
||||
debuggerplugin.cpp
|
||||
debuggerprotocol.cpp debuggerprotocol.h
|
||||
debuggerrunconfigurationaspect.cpp debuggerrunconfigurationaspect.h
|
||||
debuggerruncontrol.cpp debuggerruncontrol.h
|
||||
|
||||
@@ -14,7 +14,6 @@
|
||||
#include <debugger/debuggerdialogs.h>
|
||||
#include <debugger/debuggerinternalconstants.h>
|
||||
#include <debugger/debuggermainwindow.h>
|
||||
#include <debugger/debuggerplugin.h>
|
||||
#include <debugger/debuggerprotocol.h>
|
||||
#include <debugger/debuggerruncontrol.h>
|
||||
#include <debugger/debuggertooltipmanager.h>
|
||||
|
||||
@@ -42,7 +42,7 @@ QtcPlugin {
|
||||
"debuggeritemmanager.cpp", "debuggeritemmanager.h",
|
||||
"debuggerkitaspect.cpp", "debuggerkitaspect.h",
|
||||
"debuggermainwindow.cpp", "debuggermainwindow.h",
|
||||
"debuggerplugin.cpp", "debuggerplugin.h",
|
||||
"debuggerplugin.cpp",
|
||||
"debuggerprotocol.cpp", "debuggerprotocol.h",
|
||||
"debuggerrunconfigurationaspect.cpp", "debuggerrunconfigurationaspect.h",
|
||||
"debuggerruncontrol.cpp", "debuggerruncontrol.h",
|
||||
|
||||
@@ -1,8 +1,6 @@
|
||||
// Copyright (C) 2016 The Qt Company Ltd.
|
||||
// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
|
||||
|
||||
#include "debuggerplugin.h"
|
||||
|
||||
#include "debuggeractions.h"
|
||||
#include "debuggerinternalconstants.h"
|
||||
#include "debuggercore.h"
|
||||
@@ -25,7 +23,6 @@
|
||||
#include "sourceutils.h"
|
||||
#include "shared/hostutils.h"
|
||||
#include "console/console.h"
|
||||
#include "commonoptionspage.h"
|
||||
|
||||
#include "analyzer/analyzerconstants.h"
|
||||
#include "analyzer/analyzermanager.h"
|
||||
@@ -48,6 +45,7 @@
|
||||
#include <coreplugin/outputpane.h>
|
||||
#include <coreplugin/rightpane.h>
|
||||
|
||||
#include <extensionsystem/iplugin.h>
|
||||
#include <extensionsystem/pluginmanager.h>
|
||||
|
||||
#include <cppeditor/cppeditorconstants.h>
|
||||
@@ -112,11 +110,9 @@
|
||||
#include <QPointer>
|
||||
#include <QPushButton>
|
||||
#include <QScopeGuard>
|
||||
#include <QSortFilterProxyModel>
|
||||
#include <QStackedWidget>
|
||||
#include <QTextBlock>
|
||||
#include <QToolButton>
|
||||
#include <QTreeWidget>
|
||||
#include <QVBoxLayout>
|
||||
#include <QVariant>
|
||||
|
||||
@@ -352,6 +348,8 @@ using namespace Utils;
|
||||
namespace CC = Core::Constants;
|
||||
namespace PE = ProjectExplorer::Constants;
|
||||
|
||||
Q_DECLARE_METATYPE(QString *)
|
||||
|
||||
namespace Debugger {
|
||||
namespace Internal {
|
||||
|
||||
@@ -556,6 +554,7 @@ static Kit *findUniversalCdbKit()
|
||||
//
|
||||
///////////////////////////////////////////////////////////////////////
|
||||
|
||||
class DebuggerPlugin;
|
||||
static DebuggerPlugin *m_instance = nullptr;
|
||||
static DebuggerPluginPrivate *dd = nullptr;
|
||||
|
||||
@@ -582,7 +581,6 @@ public:
|
||||
~DebuggerPluginPrivate() override;
|
||||
|
||||
void extensionsInitialized();
|
||||
void aboutToShutdown();
|
||||
|
||||
RunControl *attachToRunningProcess(Kit *kit, const ProcessInfo &process, bool contAfterAttach);
|
||||
|
||||
@@ -1802,76 +1800,6 @@ RunControl *DebuggerPluginPrivate::attachToRunningProcess(Kit *kit,
|
||||
return debugger->runControl();
|
||||
}
|
||||
|
||||
void DebuggerPlugin::attachToProcess(const qint64 processId, const Utils::FilePath &executable)
|
||||
{
|
||||
ProcessInfo processInfo;
|
||||
processInfo.processId = processId;
|
||||
processInfo.executable = executable.toString();
|
||||
|
||||
auto kitChooser = new KitChooser;
|
||||
kitChooser->setShowIcons(true);
|
||||
kitChooser->populate();
|
||||
Kit *kit = kitChooser->currentKit();
|
||||
|
||||
dd->attachToRunningProcess(kit, processInfo, false);
|
||||
}
|
||||
|
||||
void DebuggerPlugin::attachExternalApplication(RunControl *rc)
|
||||
{
|
||||
ProcessHandle pid = rc->applicationProcessHandle();
|
||||
auto runControl = new RunControl(ProjectExplorer::Constants::DEBUG_RUN_MODE);
|
||||
runControl->setTarget(rc->target());
|
||||
runControl->setDisplayName(Tr::tr("Process %1").arg(pid.pid()));
|
||||
auto debugger = new DebuggerRunTool(runControl);
|
||||
debugger->setInferiorExecutable(rc->targetFilePath());
|
||||
debugger->setAttachPid(pid);
|
||||
debugger->setStartMode(AttachToLocalProcess);
|
||||
debugger->setCloseMode(DetachAtClose);
|
||||
debugger->startRunControl();
|
||||
}
|
||||
|
||||
void DebuggerPlugin::getEnginesState(QByteArray *json) const
|
||||
{
|
||||
QTC_ASSERT(json, return);
|
||||
QVariantMap result {
|
||||
{"version", 1}
|
||||
};
|
||||
QVariantMap states;
|
||||
|
||||
int i = 0;
|
||||
DebuggerEngine *currentEngine = EngineManager::currentEngine();
|
||||
for (DebuggerEngine *engine : EngineManager::engines()) {
|
||||
states[QString::number(i)] = QVariantMap({
|
||||
{"current", engine == currentEngine},
|
||||
{"pid", engine->inferiorPid()},
|
||||
{"state", engine->state()}
|
||||
});
|
||||
++i;
|
||||
}
|
||||
|
||||
if (!states.isEmpty())
|
||||
result["states"] = states;
|
||||
|
||||
*json = QJsonDocument(QJsonObject::fromVariantMap(result)).toJson();
|
||||
}
|
||||
|
||||
void DebuggerPlugin::autoDetectDebuggersForDevice(const FilePaths &searchPaths,
|
||||
const QString &detectionSource,
|
||||
QString *logMessage)
|
||||
{
|
||||
DebuggerItemManager::autoDetectDebuggersForDevice(searchPaths, detectionSource, logMessage);
|
||||
}
|
||||
|
||||
void DebuggerPlugin::removeDetectedDebuggers(const QString &detectionSource, QString *logMessage)
|
||||
{
|
||||
DebuggerItemManager::removeDetectedDebuggers(detectionSource, logMessage);
|
||||
}
|
||||
|
||||
void DebuggerPlugin::listDetectedDebuggers(const QString &detectionSource, QString *logMessage)
|
||||
{
|
||||
DebuggerItemManager::listDetectedDebuggers(detectionSource, logMessage);
|
||||
}
|
||||
|
||||
void DebuggerPluginPrivate::attachToQmlPort()
|
||||
{
|
||||
AttachToQmlPortDialog dlg(ICore::dialogParent());
|
||||
@@ -2106,30 +2034,6 @@ void DebuggerPluginPrivate::dumpLog()
|
||||
saver.finalize(ICore::dialogParent());
|
||||
}
|
||||
|
||||
void DebuggerPluginPrivate::aboutToShutdown()
|
||||
{
|
||||
disconnect(ProjectManager::instance(), &ProjectManager::startupProjectChanged, this, nullptr);
|
||||
|
||||
m_shutdownTimer.setInterval(0);
|
||||
m_shutdownTimer.setSingleShot(true);
|
||||
|
||||
connect(&m_shutdownTimer, &QTimer::timeout, this, [this] {
|
||||
DebuggerMainWindow::doShutdown();
|
||||
|
||||
m_shutdownTimer.stop();
|
||||
|
||||
delete m_mode;
|
||||
m_mode = nullptr;
|
||||
emit m_instance->asynchronousShutdownFinished();
|
||||
});
|
||||
|
||||
if (EngineManager::shutDown()) {
|
||||
// If any engine is aborting we give them extra three seconds.
|
||||
m_shutdownTimer.setInterval(3000);
|
||||
}
|
||||
m_shutdownTimer.start();
|
||||
}
|
||||
|
||||
void DebuggerPluginPrivate::remoteCommand(const QStringList &options)
|
||||
{
|
||||
if (options.isEmpty())
|
||||
@@ -2210,14 +2114,39 @@ void openTextEditor(const QString &titlePattern0, const QString &contents)
|
||||
//
|
||||
///////////////////////////////////////////////////////////////////////
|
||||
|
||||
/*!
|
||||
\class Debugger::DebuggerPlugin
|
||||
class DebuggerPlugin final : public ExtensionSystem::IPlugin
|
||||
{
|
||||
Q_OBJECT
|
||||
Q_PLUGIN_METADATA(IID "org.qt-project.Qt.QtCreatorPlugin" FILE "Debugger.json")
|
||||
|
||||
This is the "external" interface of the debugger plugin that's visible
|
||||
from Qt Creator core. The internal interface to global debugger
|
||||
functionality that is used by debugger views and debugger engines
|
||||
is DebuggerCore, implemented in DebuggerPluginPrivate.
|
||||
*/
|
||||
public:
|
||||
DebuggerPlugin();
|
||||
~DebuggerPlugin() final;
|
||||
|
||||
private:
|
||||
// IPlugin implementation.
|
||||
bool initialize(const QStringList &arguments, QString *errorMessage) final;
|
||||
QObject *remoteCommand(const QStringList &options,
|
||||
const QString &workingDirectory,
|
||||
const QStringList &arguments) final;
|
||||
ShutdownFlag aboutToShutdown() final;
|
||||
void extensionsInitialized() final;
|
||||
|
||||
// Called from AppOutputPane::attachToRunControl().
|
||||
Q_SLOT void attachExternalApplication(ProjectExplorer::RunControl *rc);
|
||||
|
||||
// Called from GammaRayIntegration
|
||||
Q_SLOT void getEnginesState(QByteArray *json) const;
|
||||
|
||||
// Called from DockerDevice
|
||||
Q_SLOT void autoDetectDebuggersForDevice(const Utils::FilePaths &searchPaths,
|
||||
const QString &detectionId,
|
||||
QString *logMessage);
|
||||
Q_SLOT void removeDetectedDebuggers(const QString &detectionId, QString *logMessage);
|
||||
Q_SLOT void listDetectedDebuggers(const QString &detectionId, QString *logMessage);
|
||||
|
||||
Q_SLOT void attachToProcess(const qint64 processId, const Utils::FilePath &executable);
|
||||
};
|
||||
|
||||
DebuggerPlugin::DebuggerPlugin()
|
||||
{
|
||||
@@ -2237,7 +2166,28 @@ DebuggerPlugin::~DebuggerPlugin()
|
||||
IPlugin::ShutdownFlag DebuggerPlugin::aboutToShutdown()
|
||||
{
|
||||
ExtensionSystem::PluginManager::removeObject(this);
|
||||
dd->aboutToShutdown();
|
||||
|
||||
disconnect(ProjectManager::instance(), &ProjectManager::startupProjectChanged, dd, nullptr);
|
||||
|
||||
dd->m_shutdownTimer.setInterval(0);
|
||||
dd->m_shutdownTimer.setSingleShot(true);
|
||||
|
||||
connect(&dd->m_shutdownTimer, &QTimer::timeout, this, [this] {
|
||||
DebuggerMainWindow::doShutdown();
|
||||
|
||||
dd->m_shutdownTimer.stop();
|
||||
|
||||
delete dd->m_mode;
|
||||
dd->m_mode = nullptr;
|
||||
emit asynchronousShutdownFinished();
|
||||
});
|
||||
|
||||
if (EngineManager::shutDown()) {
|
||||
// If any engine is aborting we give them extra three seconds.
|
||||
dd->m_shutdownTimer.setInterval(3000);
|
||||
}
|
||||
dd->m_shutdownTimer.start();
|
||||
|
||||
return AsynchronousShutdown;
|
||||
}
|
||||
|
||||
@@ -2607,6 +2557,76 @@ bool DebuggerPlugin::initialize(const QStringList &arguments, QString *errorMess
|
||||
return true;
|
||||
}
|
||||
|
||||
void DebuggerPlugin::attachToProcess(const qint64 processId, const Utils::FilePath &executable)
|
||||
{
|
||||
ProcessInfo processInfo;
|
||||
processInfo.processId = processId;
|
||||
processInfo.executable = executable.toString();
|
||||
|
||||
auto kitChooser = new KitChooser;
|
||||
kitChooser->setShowIcons(true);
|
||||
kitChooser->populate();
|
||||
Kit *kit = kitChooser->currentKit();
|
||||
|
||||
dd->attachToRunningProcess(kit, processInfo, false);
|
||||
}
|
||||
|
||||
void DebuggerPlugin::attachExternalApplication(RunControl *rc)
|
||||
{
|
||||
ProcessHandle pid = rc->applicationProcessHandle();
|
||||
auto runControl = new RunControl(ProjectExplorer::Constants::DEBUG_RUN_MODE);
|
||||
runControl->setTarget(rc->target());
|
||||
runControl->setDisplayName(Tr::tr("Process %1").arg(pid.pid()));
|
||||
auto debugger = new DebuggerRunTool(runControl);
|
||||
debugger->setInferiorExecutable(rc->targetFilePath());
|
||||
debugger->setAttachPid(pid);
|
||||
debugger->setStartMode(AttachToLocalProcess);
|
||||
debugger->setCloseMode(DetachAtClose);
|
||||
debugger->startRunControl();
|
||||
}
|
||||
|
||||
void DebuggerPlugin::getEnginesState(QByteArray *json) const
|
||||
{
|
||||
QTC_ASSERT(json, return);
|
||||
QVariantMap result {
|
||||
{"version", 1}
|
||||
};
|
||||
QVariantMap states;
|
||||
|
||||
int i = 0;
|
||||
DebuggerEngine *currentEngine = EngineManager::currentEngine();
|
||||
for (DebuggerEngine *engine : EngineManager::engines()) {
|
||||
states[QString::number(i)] = QVariantMap({
|
||||
{"current", engine == currentEngine},
|
||||
{"pid", engine->inferiorPid()},
|
||||
{"state", engine->state()}
|
||||
});
|
||||
++i;
|
||||
}
|
||||
|
||||
if (!states.isEmpty())
|
||||
result["states"] = states;
|
||||
|
||||
*json = QJsonDocument(QJsonObject::fromVariantMap(result)).toJson();
|
||||
}
|
||||
|
||||
void DebuggerPlugin::autoDetectDebuggersForDevice(const FilePaths &searchPaths,
|
||||
const QString &detectionSource,
|
||||
QString *logMessage)
|
||||
{
|
||||
DebuggerItemManager::autoDetectDebuggersForDevice(searchPaths, detectionSource, logMessage);
|
||||
}
|
||||
|
||||
void DebuggerPlugin::removeDetectedDebuggers(const QString &detectionSource, QString *logMessage)
|
||||
{
|
||||
DebuggerItemManager::removeDetectedDebuggers(detectionSource, logMessage);
|
||||
}
|
||||
|
||||
void DebuggerPlugin::listDetectedDebuggers(const QString &detectionSource, QString *logMessage)
|
||||
{
|
||||
DebuggerItemManager::listDetectedDebuggers(detectionSource, logMessage);
|
||||
}
|
||||
|
||||
} // Internal
|
||||
} // Debugger
|
||||
|
||||
|
||||
@@ -1,49 +0,0 @@
|
||||
// Copyright (C) 2016 The Qt Company Ltd.
|
||||
// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
|
||||
|
||||
#pragma once
|
||||
|
||||
#include <extensionsystem/iplugin.h>
|
||||
#include <utils/filepath.h>
|
||||
|
||||
namespace ProjectExplorer { class RunControl; }
|
||||
|
||||
namespace Debugger::Internal {
|
||||
|
||||
class DebuggerPlugin : public ExtensionSystem::IPlugin
|
||||
{
|
||||
Q_OBJECT
|
||||
Q_PLUGIN_METADATA(IID "org.qt-project.Qt.QtCreatorPlugin" FILE "Debugger.json")
|
||||
|
||||
public:
|
||||
DebuggerPlugin();
|
||||
~DebuggerPlugin() override;
|
||||
|
||||
private:
|
||||
// IPlugin implementation.
|
||||
bool initialize(const QStringList &arguments, QString *errorMessage) override;
|
||||
QObject *remoteCommand(const QStringList &options,
|
||||
const QString &workingDirectory,
|
||||
const QStringList &arguments) override;
|
||||
ShutdownFlag aboutToShutdown() override;
|
||||
void extensionsInitialized() override;
|
||||
|
||||
// Called from AppOutputPane::attachToRunControl().
|
||||
Q_SLOT void attachExternalApplication(ProjectExplorer::RunControl *rc);
|
||||
|
||||
// Called from GammaRayIntegration
|
||||
Q_SLOT void getEnginesState(QByteArray *json) const;
|
||||
|
||||
// Called from DockerDevice
|
||||
Q_SLOT void autoDetectDebuggersForDevice(const Utils::FilePaths &searchPaths,
|
||||
const QString &detectionId,
|
||||
QString *logMessage);
|
||||
Q_SLOT void removeDetectedDebuggers(const QString &detectionId, QString *logMessage);
|
||||
Q_SLOT void listDetectedDebuggers(const QString &detectionId, QString *logMessage);
|
||||
|
||||
Q_SLOT void attachToProcess(const qint64 processId, const Utils::FilePath &executable);
|
||||
};
|
||||
|
||||
} // Debugger::Internal
|
||||
|
||||
Q_DECLARE_METATYPE(QString *)
|
||||
@@ -8,7 +8,6 @@
|
||||
#include <debugger/debuggercore.h>
|
||||
#include <debugger/debuggerinternalconstants.h>
|
||||
#include <debugger/debuggermainwindow.h>
|
||||
#include <debugger/debuggerplugin.h>
|
||||
#include <debugger/debuggerprotocol.h>
|
||||
#include <debugger/debuggersourcepathmappingwidget.h>
|
||||
#include <debugger/debuggertooltipmanager.h>
|
||||
|
||||
@@ -7,7 +7,6 @@
|
||||
#include <debugger/debuggeractions.h>
|
||||
#include <debugger/debuggercore.h>
|
||||
#include <debugger/debuggerdialogs.h>
|
||||
#include <debugger/debuggerplugin.h>
|
||||
#include <debugger/debuggerprotocol.h>
|
||||
#include <debugger/debuggertooltipmanager.h>
|
||||
#include <debugger/debuggertr.h>
|
||||
|
||||
@@ -13,7 +13,6 @@
|
||||
|
||||
#include <debugger/debuggerconstants.h>
|
||||
#include <debugger/debuggerkitaspect.h>
|
||||
#include <debugger/debuggerplugin.h>
|
||||
#include <debugger/debuggerruncontrol.h>
|
||||
|
||||
#include <projectexplorer/kitaspects.h>
|
||||
|
||||
Reference in New Issue
Block a user