summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/plugins/android/androiddebugsupport.cpp10
-rw-r--r--src/plugins/debugger/attachcoredialog.ui6
-rw-r--r--src/plugins/debugger/attachexternaldialog.ui6
-rw-r--r--src/plugins/debugger/attachtoqmlportdialog.ui97
-rw-r--r--src/plugins/debugger/cdb/cdbengine.cpp27
-rw-r--r--src/plugins/debugger/debugger.pro3
-rw-r--r--src/plugins/debugger/debugger.qbs1
-rw-r--r--src/plugins/debugger/debuggercore.h4
-rw-r--r--src/plugins/debugger/debuggerdialogs.cpp134
-rw-r--r--src/plugins/debugger/debuggerdialogs.h17
-rw-r--r--src/plugins/debugger/debuggerengine.cpp9
-rw-r--r--src/plugins/debugger/debuggerplugin.cpp219
-rw-r--r--src/plugins/debugger/debuggerrunner.cpp37
-rw-r--r--src/plugins/debugger/debuggerstartparameters.h18
-rw-r--r--src/plugins/debugger/debuggertoolchaincombobox.cpp25
-rw-r--r--src/plugins/debugger/debuggertoolchaincombobox.h11
-rw-r--r--src/plugins/debugger/disassembleragent.cpp20
-rw-r--r--src/plugins/debugger/disassembleragent.h1
-rw-r--r--src/plugins/debugger/gdb/gdbengine.cpp31
-rw-r--r--src/plugins/debugger/gdb/remoteplaingdbadapter.cpp7
-rw-r--r--src/plugins/debugger/loadremotecoredialog.cpp25
-rw-r--r--src/plugins/debugger/loadremotecoredialog.h4
-rw-r--r--src/plugins/debugger/startexternaldialog.ui6
-rw-r--r--src/plugins/debugger/startremotedialog.ui4
-rw-r--r--src/plugins/qmlprojectmanager/qmlprojectruncontrol.cpp4
-rw-r--r--src/plugins/qt4projectmanager/qt-s60/s60devicedebugruncontrol.cpp19
-rw-r--r--src/plugins/remotelinux/remotelinuxdebugsupport.cpp22
-rw-r--r--src/plugins/remotelinux/startgdbserverdialog.cpp22
28 files changed, 331 insertions, 458 deletions
diff --git a/src/plugins/android/androiddebugsupport.cpp b/src/plugins/android/androiddebugsupport.cpp
index 5eb5150f34..bc058216c5 100644
--- a/src/plugins/android/androiddebugsupport.cpp
+++ b/src/plugins/android/androiddebugsupport.cpp
@@ -37,9 +37,10 @@
#include "androidrunner.h"
#include "androidmanager.h"
+#include <debugger/debuggerengine.h>
#include <debugger/debuggerplugin.h>
+#include <debugger/debuggerprofileinformation.h>
#include <debugger/debuggerrunner.h>
-#include <debugger/debuggerengine.h>
#include <debugger/debuggerstartparameters.h>
#include <projectexplorer/target.h>
@@ -69,11 +70,14 @@ static Qt4Project *project(AndroidRunConfiguration *rc)
RunControl *AndroidDebugSupport::createDebugRunControl(AndroidRunConfiguration *runConfig)
{
DebuggerStartParameters params;
- params.toolChainAbi = runConfig->abi();
+ Profile *profile = runConfig->target()->profile();
+ params.sysRoot = SysRootProfileInformation::sysRoot(profile).toString();
+ params.debuggerCommand = DebuggerProfileInformation::debuggerCommand(profile).toString();
+ if (ToolChain *tc = ToolChainProfileInformation::toolChain(profile))
+ params.toolChainAbi = tc->targetAbi();
params.dumperLibrary = runConfig->dumperLib();
params.startMode = AttachToRemoteServer;
params.executable = project(runConfig)->rootQt4ProjectNode()->buildDir() + QLatin1String("/app_process");
- params.debuggerCommand = runConfig->gdbCmd().toString();
params.remoteChannel = runConfig->remoteChannel();
params.displayName = AndroidManager::packageName(runConfig->target());
diff --git a/src/plugins/debugger/attachcoredialog.ui b/src/plugins/debugger/attachcoredialog.ui
index 1eab1b5dea..5502c7ea02 100644
--- a/src/plugins/debugger/attachcoredialog.ui
+++ b/src/plugins/debugger/attachcoredialog.ui
@@ -60,7 +60,7 @@
<item row="2" column="0">
<widget class="QLabel" name="toolchainLabel">
<property name="text">
- <string>&amp;Tool chain:</string>
+ <string>&amp;Target:</string>
</property>
<property name="buddy">
<cstring>toolchainComboBox</cstring>
@@ -68,7 +68,7 @@
</widget>
</item>
<item row="2" column="1">
- <widget class="Debugger::Internal::DebuggerToolChainComboBox" name="toolchainComboBox"/>
+ <widget class="Debugger::ProfileChooser" name="toolchainComboBox"/>
</item>
<item row="3" column="1">
<widget class="Utils::PathChooser" name="overrideStartScriptFileName" native="true"/>
@@ -129,7 +129,7 @@
</slots>
</customwidget>
<customwidget>
- <class>Debugger::Internal::DebuggerToolChainComboBox</class>
+ <class>Debugger::ProfileChooser</class>
<extends>QComboBox</extends>
<header>debuggertoolchaincombobox.h</header>
</customwidget>
diff --git a/src/plugins/debugger/attachexternaldialog.ui b/src/plugins/debugger/attachexternaldialog.ui
index c2f945a4cc..c112654310 100644
--- a/src/plugins/debugger/attachexternaldialog.ui
+++ b/src/plugins/debugger/attachexternaldialog.ui
@@ -44,7 +44,7 @@
<item row="1" column="0">
<widget class="QLabel" name="toolchainLabel">
<property name="text">
- <string>&amp;Tool chain:</string>
+ <string>&amp;Target:</string>
</property>
<property name="buddy">
<cstring>toolchainComboBox</cstring>
@@ -52,7 +52,7 @@
</widget>
</item>
<item row="1" column="1">
- <widget class="Debugger::Internal::DebuggerToolChainComboBox" name="toolchainComboBox"/>
+ <widget class="Debugger::ProfileChooser" name="toolchainComboBox"/>
</item>
</layout>
</item>
@@ -94,7 +94,7 @@
<header location="global">utils/filterlineedit.h</header>
</customwidget>
<customwidget>
- <class>Debugger::Internal::DebuggerToolChainComboBox</class>
+ <class>Debugger::ProfileChooser</class>
<extends>QComboBox</extends>
<header>debuggertoolchaincombobox.h</header>
</customwidget>
diff --git a/src/plugins/debugger/attachtoqmlportdialog.ui b/src/plugins/debugger/attachtoqmlportdialog.ui
deleted file mode 100644
index caf141f5df..0000000000
--- a/src/plugins/debugger/attachtoqmlportdialog.ui
+++ /dev/null
@@ -1,97 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<ui version="4.0">
- <class>Debugger::Internal::AttachToQmlPortDialog</class>
- <widget class="QDialog" name="Debugger::Internal::AttachToQmlPortDialog">
- <property name="geometry">
- <rect>
- <x>0</x>
- <y>0</y>
- <width>212</width>
- <height>136</height>
- </rect>
- </property>
- <property name="windowTitle">
- <string>Start Debugger</string>
- </property>
- <layout class="QVBoxLayout" name="verticalLayout">
- <item>
- <layout class="QFormLayout" name="formLayout">
- <item row="0" column="0">
- <widget class="QLabel" name="hostLabel">
- <property name="text">
- <string>&amp;Host:</string>
- </property>
- <property name="buddy">
- <cstring>hostLineEdit</cstring>
- </property>
- </widget>
- </item>
- <item row="0" column="1">
- <widget class="QLineEdit" name="hostLineEdit">
- <property name="text">
- <string notr="true">localhost</string>
- </property>
- </widget>
- </item>
- <item row="1" column="0">
- <widget class="QLabel" name="portLabel">
- <property name="text">
- <string>&amp;Port:</string>
- </property>
- <property name="buddy">
- <cstring>portSpinBox</cstring>
- </property>
- </widget>
- </item>
- <item row="1" column="1">
- <widget class="QSpinBox" name="portSpinBox">
- <property name="maximum">
- <number>65535</number>
- </property>
- <property name="value">
- <number>3768</number>
- </property>
- </widget>
- </item>
- <item row="2" column="0">
- <widget class="QLabel" name="sysrootLabel">
- <property name="text">
- <string>Sys&amp;root:</string>
- </property>
- <property name="buddy">
- <cstring>sysRootChooser</cstring>
- </property>
- </widget>
- </item>
- <item row="2" column="1">
- <widget class="Utils::PathChooser" name="sysRootChooser" native="true"/>
- </item>
- </layout>
- </item>
- <item>
- <widget class="QDialogButtonBox" name="buttonBox">
- <property name="orientation">
- <enum>Qt::Horizontal</enum>
- </property>
- <property name="standardButtons">
- <set>QDialogButtonBox::Cancel|QDialogButtonBox::Ok</set>
- </property>
- </widget>
- </item>
- </layout>
- </widget>
- <customwidgets>
- <customwidget>
- <class>Utils::PathChooser</class>
- <extends>QWidget</extends>
- <header location="global">utils/pathchooser.h</header>
- <container>1</container>
- <slots>
- <signal>editingFinished()</signal>
- <signal>browsingFinished()</signal>
- </slots>
- </customwidget>
- </customwidgets>
- <resources/>
- <connections/>
-</ui>
diff --git a/src/plugins/debugger/cdb/cdbengine.cpp b/src/plugins/debugger/cdb/cdbengine.cpp
index 112ed2524c..fb8e260531 100644
--- a/src/plugins/debugger/cdb/cdbengine.cpp
+++ b/src/plugins/debugger/cdb/cdbengine.cpp
@@ -368,24 +368,13 @@ static inline bool isMsvcFlavor(Abi::OSFlavor osf)
|| osf == Abi::WindowsMsvc2010Flavor;
}
-static QString cdbBinary(const DebuggerStartParameters &sp)
-{
- if (!sp.debuggerCommand.isEmpty()) {
- // Do not use a GDB binary if we got started for a project with MinGW runtime.
- const bool abiMatch = sp.toolChainAbi.os() == Abi::WindowsOS
- && isMsvcFlavor(sp.toolChainAbi.osFlavor());
- if (abiMatch)
- return sp.debuggerCommand;
- }
- return debuggerCore()->debuggerForAbi(sp.toolChainAbi, CdbEngineType);
-}
-
bool checkCdbConfiguration(const DebuggerStartParameters &sp, ConfigurationCheck *check)
{
#ifdef Q_OS_WIN
+ const Abi abi = toolChainAbi(sp);
if (!isCdbEngineEnabled()) {
check->errorDetails.push_back(CdbEngine::tr("The CDB debug engine required for %1 is currently disabled.").
- arg(sp.toolChainAbi.toString()));
+ arg(abi.toString()));
check->settingsCategory = QLatin1String(Debugger::Constants::DEBUGGER_SETTINGS_CATEGORY);
check->settingsPage = CdbOptionsPage::settingsId();
return false;
@@ -396,19 +385,19 @@ bool checkCdbConfiguration(const DebuggerStartParameters &sp, ConfigurationCheck
return false;
}
- if (sp.toolChainAbi.binaryFormat() != Abi::PEFormat || sp.toolChainAbi.os() != Abi::WindowsOS) {
+ if (abi.binaryFormat() != Abi::PEFormat || abi.os() != Abi::WindowsOS) {
check->errorDetails.push_back(CdbEngine::tr("The CDB debug engine does not support the %1 ABI.").
- arg(sp.toolChainAbi.toString()));
+ arg(abi.toString()));
return false;
}
- if (sp.startMode == AttachCore && !isMsvcFlavor(sp.toolChainAbi.osFlavor())) {
+ if (sp.startMode == AttachCore && !isMsvcFlavor(abi.osFlavor())) {
check->errorDetails.push_back(CdbEngine::tr("The CDB debug engine cannot debug gdb core files."));
return false;
}
- if (cdbBinary(sp).isEmpty()) {
- check->errorDetails.push_back(msgNoCdbBinaryForToolChain(sp.toolChainAbi));
+ if (debuggerCommand(sp).isEmpty()) {
+ check->errorDetails.push_back(msgNoCdbBinaryForToolChain(abi));
check->settingsCategory = QLatin1String(ProjectExplorer::Constants::PROJECTEXPLORER_SETTINGS_CATEGORY);
check->settingsPage = QLatin1String(ProjectExplorer::Constants::PROJECTEXPLORER_SETTINGS_CATEGORY);
return false;
@@ -722,7 +711,7 @@ bool CdbEngine::launchCDB(const DebuggerStartParameters &sp, QString *errorMessa
// Determine binary (force MSVC), extension lib name and path to use
// The extension is passed as relative name with the path variable set
//(does not work with absolute path names)
- const QString executable = cdbBinary(sp);
+ const QString executable = sp.debuggerCommand;
if (executable.isEmpty()) {
*errorMessage = tr("There is no CDB executable specified.");
return false;
diff --git a/src/plugins/debugger/debugger.pro b/src/plugins/debugger/debugger.pro
index e633c50ab4..edc8fa1bb6 100644
--- a/src/plugins/debugger/debugger.pro
+++ b/src/plugins/debugger/debugger.pro
@@ -143,8 +143,7 @@ FORMS += attachexternaldialog.ui \
commonoptionspage.ui \
startexternaldialog.ui \
startremotedialog.ui \
- startremoteenginedialog.ui \
- attachtoqmlportdialog.ui
+ startremoteenginedialog.ui
RESOURCES += debugger.qrc
diff --git a/src/plugins/debugger/debugger.qbs b/src/plugins/debugger/debugger.qbs
index a2de81509e..ef9e1456a4 100644
--- a/src/plugins/debugger/debugger.qbs
+++ b/src/plugins/debugger/debugger.qbs
@@ -42,7 +42,6 @@ QtcPlugin {
"debuggerprofileinformation.h",
"attachcoredialog.ui",
"attachexternaldialog.ui",
- "attachtoqmlportdialog.ui",
"basewindow.cpp",
"breakhandler.cpp",
"breakhandler.h",
diff --git a/src/plugins/debugger/debuggercore.h b/src/plugins/debugger/debuggercore.h
index 57d18dcd40..8761ffc095 100644
--- a/src/plugins/debugger/debuggercore.h
+++ b/src/plugins/debugger/debuggercore.h
@@ -110,8 +110,8 @@ public:
virtual bool initialize(const QStringList &arguments, QString *errorMessage) = 0;
virtual QWidget *mainWindow() const = 0;
virtual bool isDockVisible(const QString &objectName) const = 0;
- virtual QString debuggerForAbi(const ProjectExplorer::Abi &abi,
- DebuggerEngineType et = NoEngineType) const = 0;
+// virtual QString debuggerForAbi(const ProjectExplorer::Abi &abi,
+// DebuggerEngineType et = NoEngineType) const = 0;
virtual void showModuleSymbols(const QString &moduleName,
const QVector<Symbol> &symbols) = 0;
virtual void openMemoryEditor() = 0;
diff --git a/src/plugins/debugger/debuggerdialogs.cpp b/src/plugins/debugger/debuggerdialogs.cpp
index aca2e8edfd..502e54ccad 100644
--- a/src/plugins/debugger/debuggerdialogs.cpp
+++ b/src/plugins/debugger/debuggerdialogs.cpp
@@ -36,6 +36,7 @@
#include "debuggerconstants.h"
#include "debuggerprofileinformation.h"
#include "debuggerstringutils.h"
+#include "debuggertoolchaincombobox.h"
#include "cdb/cdbengine.h"
#include "shared/hostutils.h"
@@ -44,31 +45,40 @@
#include "ui_startexternaldialog.h"
#include "ui_startremotedialog.h"
#include "ui_startremoteenginedialog.h"
-#include "ui_attachtoqmlportdialog.h"
#include <coreplugin/icore.h>
#include <projectexplorer/abi.h>
#include <projectexplorer/profileinformation.h>
#include <utils/historycompleter.h>
+#include <utils/pathchooser.h>
#include <utils/qtcassert.h>
#include <utils/synchronousprocess.h>
+#include <QAction>
+#include <QApplication>
+#include <QButtonGroup>
#include <QCoreApplication>
#include <QDebug>
+#include <QDialog>
+#include <QDialogButtonBox>
#include <QDir>
-#include <QRegExp>
-
-#include <QButtonGroup>
#include <QFileDialog>
+#include <QFormLayout>
+#include <QGridLayout>
#include <QGroupBox>
#include <QHeaderView>
+#include <QLabel>
+#include <QLineEdit>
#include <QMessageBox>
#include <QPushButton>
#include <QRadioButton>
+#include <QRegExp>
#include <QScrollArea>
#include <QSortFilterProxyModel>
+#include <QSpinBox>
#include <QStandardItemModel>
-#include <QGridLayout>
+#include <QVariant>
+#include <QVBoxLayout>
using namespace ProjectExplorer;
using namespace Utils;
@@ -232,9 +242,9 @@ void AttachCoreDialog::setCoreFile(const QString &fileName)
changed();
}
-Profile *AttachCoreDialog::profile() const
+Core::Id AttachCoreDialog::profileId() const
{
- return m_ui->toolchainComboBox->currentProfile();
+ return m_ui->toolchainComboBox->currentProfileId();
}
void AttachCoreDialog::setProfileIndex(int i)
@@ -379,9 +389,9 @@ QString AttachExternalDialog::executable() const
return m_model->executableForPid(attachPIDText());
}
-Profile *AttachExternalDialog::profile() const
+Core::Id AttachExternalDialog::profileId() const
{
- return m_ui->toolchainComboBox->currentProfile();
+ return m_ui->toolchainComboBox->currentProfileId();
}
void AttachExternalDialog::setProfileIndex(int i)
@@ -587,9 +597,9 @@ QString StartExternalDialog::executableFile() const
return m_ui->execFile->path();
}
-Profile *StartExternalDialog::profile() const
+Core::Id StartExternalDialog::profileId() const
{
- return m_ui->toolChainComboBox->currentProfile();
+ return m_ui->toolChainComboBox->currentProfileId();
}
bool StartExternalDialog::isValid() const
@@ -670,28 +680,14 @@ bool StartExternalDialog::run(QWidget *parent,
writeParameterHistory(history, settings, settingsGroup, arrayName);
}
- Profile *profile = dialog.profile();
- QTC_ASSERT(profile, return false);
- ToolChain *tc = ToolChainProfileInformation::toolChain(profile);
- QTC_ASSERT(tc, return false);
-
+ fillParameters(sp, dialog.profileId());
sp->executable = newParameters.executableFile;
sp->startMode = StartExternal;
- sp->toolChainAbi = tc->targetAbi();
- sp->debuggerCommand = DebuggerProfileInformation::debuggerCommand(profile).toString();
sp->workingDirectory = newParameters.workingDirectory;
sp->displayName = sp->executable;
sp->useTerminal = newParameters.runInTerminal;
if (!newParameters.arguments.isEmpty())
sp->processArgs = newParameters.arguments;
- // Fixme: 1 of 3 testing hacks.
- if (sp->processArgs.startsWith(QLatin1String("@tcf@ ")) || sp->processArgs.startsWith(QLatin1String("@sym@ ")))
- // Set up an ARM Symbian Abi
- sp->toolChainAbi = Abi(Abi::ArmArchitecture,
- Abi::SymbianOS,
- Abi::SymbianDeviceFlavor,
- Abi::ElfFormat, false);
-
sp->breakOnMain = newParameters.breakAtMain;
return true;
}
@@ -847,17 +843,11 @@ bool StartRemoteDialog::run(QWidget *parent,
writeParameterHistory(history, settings, settingsGroup, arrayName);
}
- Profile *profile = dialog.profile();
- QTC_ASSERT(profile, return false);
- ToolChain *tc = ToolChainProfileInformation::toolChain(profile);
- QTC_ASSERT(tc, return false);
-
+ fillParameters(sp, dialog.profileId());
sp->remoteChannel = newParameters.remoteChannel;
sp->remoteArchitecture = newParameters.remoteArchitecture;
sp->executable = newParameters.localExecutable;
sp->displayName = tr("Remote: \"%1\"").arg(sp->remoteChannel);
- sp->debuggerCommand = DebuggerProfileInformation::debuggerCommand(profile).toString();
- sp->toolChainAbi = tc->targetAbi();
sp->overrideStartScript = newParameters.overrideStartScript;
sp->useServerStartScript = newParameters.useServerStartScript;
sp->serverStartScript = newParameters.serverStartScript;
@@ -911,9 +901,9 @@ void StartRemoteDialog::historyIndexChanged(int index)
setParameters(v.value<StartRemoteParameters>());
}
-Profile *StartRemoteDialog::profile() const
+Core::Id StartRemoteDialog::profileId() const
{
- return m_ui->toolchainComboBox->currentProfile();
+ return m_ui->toolchainComboBox->currentProfileId();
}
void StartRemoteDialog::setRemoteArchitectures(const QStringList &list)
@@ -938,51 +928,97 @@ void StartRemoteDialog::updateState()
//
///////////////////////////////////////////////////////////////////////
+class AttachToQmlPortDialogPrivate
+{
+public:
+ QLabel *hostLabel;
+ QLineEdit *hostLineEdit;
+ QLabel *portLabel;
+ QSpinBox *portSpinBox;
+ QLabel *profileLabel;
+ Debugger::ProfileChooser *profileChooser;
+};
+
AttachToQmlPortDialog::AttachToQmlPortDialog(QWidget *parent)
: QDialog(parent),
- m_ui(new Ui::AttachToQmlPortDialog)
+ d(new AttachToQmlPortDialogPrivate)
{
setWindowFlags(windowFlags() & ~Qt::WindowContextHelpButtonHint);
- m_ui->setupUi(this);
- m_ui->buttonBox->button(QDialogButtonBox::Ok)->setDefault(true);
+ setWindowTitle(tr("Start Debugger"));
- connect(m_ui->buttonBox, SIGNAL(accepted()), this, SLOT(accept()));
- connect(m_ui->buttonBox, SIGNAL(rejected()), this, SLOT(reject()));
+ d->hostLineEdit = new QLineEdit(this);
+ d->hostLineEdit->setText(QString::fromUtf8("localhost"));
+
+ d->hostLabel = new QLabel(this);
+ d->hostLabel->setText(tr("&Host:"));
+ d->hostLabel->setBuddy(d->hostLineEdit);
+
+ d->portSpinBox = new QSpinBox(this);
+ d->portSpinBox->setMaximum(65535);
+ d->portSpinBox->setValue(3768);
+
+ d->portLabel = new QLabel(this);
+ d->portLabel->setText(tr("&Port:"));
+ d->portLabel->setBuddy(d->portSpinBox);
+
+ d->profileChooser = new Debugger::ProfileChooser(this);
+
+ d->profileLabel = new QLabel(this);
+ d->profileLabel->setText(tr("Target:"));
+
+ QDialogButtonBox *buttonBox = new QDialogButtonBox(this);
+ buttonBox->setOrientation(Qt::Horizontal);
+ buttonBox->setStandardButtons(QDialogButtonBox::Cancel|QDialogButtonBox::Ok);
+
+ QVBoxLayout *verticalLayout = new QVBoxLayout(this);
+ QFormLayout *formLayout = new QFormLayout();
+
+ formLayout->addRow(d->hostLabel, d->hostLineEdit);
+ formLayout->addRow(d->portLabel, d->portSpinBox);
+ formLayout->addRow(d->profileLabel, d->profileChooser);
+
+ verticalLayout->addLayout(formLayout);
+ verticalLayout->addWidget(buttonBox);
+
+ buttonBox->button(QDialogButtonBox::Ok)->setDefault(true);
+
+ connect(buttonBox, SIGNAL(accepted()), this, SLOT(accept()));
+ connect(buttonBox, SIGNAL(rejected()), this, SLOT(reject()));
}
AttachToQmlPortDialog::~AttachToQmlPortDialog()
{
- delete m_ui;
+ delete d;
}
void AttachToQmlPortDialog::setHost(const QString &host)
{
- m_ui->hostLineEdit->setText(host);
+ d->hostLineEdit->setText(host);
}
QString AttachToQmlPortDialog::host() const
{
- return m_ui->hostLineEdit->text();
+ return d->hostLineEdit->text();
}
void AttachToQmlPortDialog::setPort(const int port)
{
- m_ui->portSpinBox->setValue(port);
+ d->portSpinBox->setValue(port);
}
int AttachToQmlPortDialog::port() const
{
- return m_ui->portSpinBox->value();
+ return d->portSpinBox->value();
}
-QString AttachToQmlPortDialog::sysroot() const
+Core::Id AttachToQmlPortDialog::profileId() const
{
- return m_ui->sysRootChooser->path();
+ return d->profileChooser->currentProfileId();
}
-void AttachToQmlPortDialog::setSysroot(const QString &sysroot)
+void AttachToQmlPortDialog::setProfileId(const Core::Id &id)
{
- m_ui->sysRootChooser->setPath(sysroot);
+ d->profileChooser->setCurrentProfileId(id);
}
// --------- StartRemoteCdbDialog
diff --git a/src/plugins/debugger/debuggerdialogs.h b/src/plugins/debugger/debuggerdialogs.h
index 69b20832aa..1b9578bfb7 100644
--- a/src/plugins/debugger/debuggerdialogs.h
+++ b/src/plugins/debugger/debuggerdialogs.h
@@ -45,6 +45,7 @@ class QDialogButtonBox;
class QSettings;
QT_END_NAMESPACE
+namespace Core { class Id; }
namespace ProjectExplorer { class Profile; }
namespace Debugger {
@@ -57,13 +58,13 @@ class AttachCoreDialog;
class AttachExternalDialog;
class StartExternalDialog;
class StartRemoteDialog;
-class AttachToQmlPortDialog;
class StartRemoteEngineDialog;
} // namespace Ui
class ProcessListFilterModel;
class StartExternalParameters;
class StartRemoteParameters;
+class AttachToQmlPortDialogPrivate;
class AttachCoreDialog : public QDialog
{
@@ -81,7 +82,7 @@ public:
int profileIndex() const;
void setProfileIndex(int);
- ProjectExplorer::Profile *profile() const;
+ Core::Id profileId() const;
QString overrideStartScript() const;
void setOverrideStartScript(const QString &scriptName);
@@ -108,7 +109,7 @@ public:
int profileIndex() const;
void setProfileIndex(int);
- ProjectExplorer::Profile *profile() const;
+ Core::Id profileId() const;
void accept();
@@ -150,7 +151,7 @@ private:
QString executableFile() const;
void setExecutableFile(const QString &executable);
- ProjectExplorer::Profile *profile() const;
+ Core::Id profileId() const;
bool isValid() const;
Ui::StartExternalDialog *m_ui;
@@ -178,7 +179,7 @@ private:
void setRemoteArchitectures(const QStringList &list);
- ProjectExplorer::Profile *profile() const;
+ Core::Id profileId() const;
Ui::StartRemoteDialog *m_ui;
};
@@ -197,11 +198,11 @@ public:
int port() const;
void setPort(const int port);
- QString sysroot() const;
- void setSysroot(const QString &sysroot);
+ Core::Id profileId() const;
+ void setProfileId(const Core::Id &id);
private:
- Ui::AttachToQmlPortDialog *m_ui;
+ AttachToQmlPortDialogPrivate *d;
};
class StartRemoteCdbDialog : public QDialog
diff --git a/src/plugins/debugger/debuggerengine.cpp b/src/plugins/debugger/debuggerengine.cpp
index e7d1cb7858..df038d71f9 100644
--- a/src/plugins/debugger/debuggerengine.cpp
+++ b/src/plugins/debugger/debuggerengine.cpp
@@ -185,8 +185,6 @@ public:
m_taskHub(0)
{
connect(&m_locationTimer, SIGNAL(timeout()), SLOT(resetLocation()));
- if (sp.toolChainAbi.os() == Abi::MacOS)
- m_disassemblerAgent.setTryMixed(false);
}
~DebuggerEnginePrivate() {}
@@ -1321,9 +1319,10 @@ DebuggerLanguages DebuggerEngine::languages() const
QString DebuggerEngine::toFileInProject(const QUrl &fileUrl)
{
// make sure file finder is properly initialized
- d->m_fileFinder.setProjectDirectory(startParameters().projectSourceDirectory);
- d->m_fileFinder.setProjectFiles(startParameters().projectSourceFiles);
- d->m_fileFinder.setSysroot(startParameters().sysroot);
+ const DebuggerStartParameters &sp = startParameters();
+ d->m_fileFinder.setProjectDirectory(sp.projectSourceDirectory);
+ d->m_fileFinder.setProjectFiles(sp.projectSourceFiles);
+ d->m_fileFinder.setSysroot(sp.sysRoot);
return d->m_fileFinder.findFile(fileUrl);
}
diff --git a/src/plugins/debugger/debuggerplugin.cpp b/src/plugins/debugger/debuggerplugin.cpp
index c4ce7405a5..cabab778e9 100644
--- a/src/plugins/debugger/debuggerplugin.cpp
+++ b/src/plugins/debugger/debuggerplugin.cpp
@@ -466,14 +466,6 @@ static QToolButton *toolButton(const char *id)
return toolButton(Core::ActionManager::command(id)->action());
}
-static Abi anyAbiOfBinary(const QString &fileName)
-{
- QList<Abi> abis = Abi::abisOfBinary(Utils::FileName::fromString(fileName));
- if (abis.isEmpty())
- return Abi();
- return abis.at(0);
-}
-
///////////////////////////////////////////////////////////////////////
//
// DummyEngine
@@ -554,6 +546,17 @@ public:
//
///////////////////////////////////////////////////////////////////////
+void fillParameters(DebuggerStartParameters *sp, Core::Id id)
+{
+ Profile *profile = ProfileManager::instance()->find(id);
+ QTC_ASSERT(profile, return);
+ sp->sysRoot = SysRootProfileInformation::sysRoot(profile).toString();
+ sp->debuggerCommand = DebuggerProfileInformation::debuggerCommand(profile).toString();
+ ToolChain *tc = ToolChainProfileInformation::toolChain(profile);
+ if (tc)
+ sp->toolChainAbi = tc->targetAbi();
+}
+
static TextEditor::ITextEditor *currentTextEditor()
{
return qobject_cast<TextEditor::ITextEditor *>(Core::EditorManager::currentEditor());
@@ -768,7 +771,7 @@ public slots:
void startRemoteProcess();
void startRemoteServer();
void loadRemoteCoreFile();
- bool queryRemoteParameters(DebuggerStartParameters &sp, bool useScript);
+ //bool queryRemoteParameters(DebuggerStartParameters &sp, bool useScript);
void attachToRemoteServer();
void attachToRemoteProcess();
void attachToQmlPort();
@@ -798,7 +801,7 @@ public slots:
void runControlFinished(DebuggerEngine *engine);
DebuggerLanguages activeLanguages() const;
unsigned enabledEngines() const { return m_cmdLineEnabledEngines; }
- QString debuggerForAbi(const Abi &abi, DebuggerEngineType et = NoEngineType) const;
+// QString debuggerForAbi(const Abi &abi, DebuggerEngineType et = NoEngineType) const;
void remoteCommand(const QStringList &options, const QStringList &);
bool isReverseDebugging() const;
@@ -1092,9 +1095,9 @@ public slots:
// FIXME: Remove.
void maybeEnrichParameters(DebuggerStartParameters *sp);
- void gdbServerStarted(const QString &channel, const QString &sysroot,
+ void gdbServerStarted(const QString &channel, const QString &profile,
const QString &remoteCommandLine, const QString &remoteExecutable);
- void attachedToProcess(const QString &channel, const QString &sysroot,
+ void attachedToProcess(const QString &channel, const QString &profile,
const QString &remoteCommandLine, const QString &remoteExecutable);
void updateQmlActions() {
@@ -1289,21 +1292,12 @@ void DebuggerPluginPrivate::maybeEnrichParameters(DebuggerStartParameters *sp)
{
if (!boolSetting(AutoEnrichParameters))
return;
- if (sp->sysroot.isEmpty() &&
- (sp->startMode == AttachToRemoteServer
- || sp->startMode == StartRemoteProcess
- || sp->startMode == AttachToRemoteProcess
- || sp->startMode == LoadRemoteCore)) {
- // FIXME: Get from BaseQtVersion.
- sp->sysroot = QString::fromLocal8Bit(qgetenv("QTC_DEBUGGER_SYSROOT"));
- showMessage(QString::fromLatin1("USING QTC_DEBUGGER_SYSROOT %1")
- .arg(sp->sysroot), LogWarning);
- }
+ const QString sysroot = sp->sysRoot;
if (sp->debugInfoLocation.isEmpty()) {
- sp->debugInfoLocation = sp->sysroot + QLatin1String("/usr/lib/debug");
+ sp->debugInfoLocation = sysroot + QLatin1String("/usr/lib/debug");
}
if (sp->debugSourceLocation.isEmpty()) {
- QString base = sp->sysroot + QLatin1String("/usr/src/debug/");
+ QString base = sysroot + QLatin1String("/usr/src/debug/");
sp->debugSourceLocation.append(base + QLatin1String("qt5base/src/corelib"));
sp->debugSourceLocation.append(base + QLatin1String("qt5base/src/gui"));
sp->debugSourceLocation.append(base + QLatin1String("qt5base/src/network"));
@@ -1318,7 +1312,7 @@ bool DebuggerPluginPrivate::parseArgument(QStringList::const_iterator &it,
{
const QString &option = *it;
// '-debug <pid>'
- // '-debug <exe>[,server=<server:port>|,core=<core>][,arch=<arch>][,sysroot=<sysroot>]'
+ // '-debug <exe>[,server=<server:port>|,core=<core>][,arch=<arch>][,profile=<profile>]'
if (*it == _("-debug")) {
++it;
if (it == cend) {
@@ -1326,6 +1320,7 @@ bool DebuggerPluginPrivate::parseArgument(QStringList::const_iterator &it,
return false;
}
DebuggerStartParameters sp;
+ fillParameters(&sp, ProfileManager::instance()->defaultProfile()->id());
qulonglong pid = it->toULongLong();
if (pid) {
sp.startMode = AttachExternal;
@@ -1333,10 +1328,9 @@ bool DebuggerPluginPrivate::parseArgument(QStringList::const_iterator &it,
sp.attachPID = pid;
sp.displayName = tr("Process %1").arg(sp.attachPID);
sp.startMessage = tr("Attaching to local process %1.").arg(sp.attachPID);
- sp.toolChainAbi = Abi::hostAbi();
} else {
- QStringList args = it->split(QLatin1Char(','));
sp.startMode = StartExternal;
+ QStringList args = it->split(QLatin1Char(','));
foreach (const QString &arg, args) {
QString key = arg.section(QLatin1Char('='), 0, 0);
QString val = arg.section(QLatin1Char('='), 1, 1);
@@ -1365,10 +1359,9 @@ bool DebuggerPluginPrivate::parseArgument(QStringList::const_iterator &it,
sp.displayName = tr("Core file \"%1\"").arg(sp.coreFile);
sp.startMessage = tr("Attaching to core file %1.").arg(sp.coreFile);
}
- else if (key == QLatin1String("sysroot"))
- sp.sysroot = val;
+ else if (key == QLatin1String("profile"))
+ fillParameters(&sp, Id(val));
}
- sp.toolChainAbi = anyAbiOfBinary(sp.executable);
}
if (sp.startMode == StartExternal) {
sp.displayName = tr("Executable file \"%1\"").arg(sp.executable);
@@ -1389,12 +1382,12 @@ bool DebuggerPluginPrivate::parseArgument(QStringList::const_iterator &it,
return false;
}
DebuggerStartParameters sp;
+ fillParameters(&sp, ProfileManager::instance()->defaultProfile()->id());
sp.startMode = AttachCrashedExternal;
sp.crashParameter = it->section(QLatin1Char(':'), 0, 0);
sp.attachPID = it->section(QLatin1Char(':'), 1, 1).toULongLong();
sp.displayName = tr("Crashed process %1").arg(sp.attachPID);
sp.startMessage = tr("Attaching to crashed process %1").arg(sp.attachPID);
- sp.toolChainAbi = Abi::hostAbi();
if (!sp.attachPID) {
*errorMessage = DebuggerPlugin::tr("The parameter '%1' of option '%2' "
"does not match the pattern <handle>:<pid>.").arg(*it, option);
@@ -1547,19 +1540,13 @@ void DebuggerPluginPrivate::attachExternalApplication()
setConfigValue(_("LastAttachExternalProfileIndex"), QVariant(dlg.profileIndex()));
- Profile *profile = dlg.profile();
- QTC_ASSERT(profile, return);
- ToolChain *tc = ToolChainProfileInformation::toolChain(profile);
- QTC_ASSERT(tc, return);
-
DebuggerStartParameters sp;
+ fillParameters(&sp, dlg.profileId());
sp.attachPID = dlg.attachPID();
sp.displayName = tr("Process %1").arg(dlg.attachPID());
sp.executable = dlg.executable();
sp.startMode = AttachExternal;
sp.closeMode = DetachAtClose;
- sp.toolChainAbi = tc->targetAbi();
- sp.debuggerCommand = DebuggerProfileInformation::debuggerCommand(profile).toString();
if (DebuggerRunControl *rc = createDebugger(sp))
startDebugger(rc);
}
@@ -1567,11 +1554,11 @@ void DebuggerPluginPrivate::attachExternalApplication()
void DebuggerPluginPrivate::attachExternalApplication(RunControl *rc)
{
DebuggerStartParameters sp;
+ fillParameters(&sp, ProfileManager::instance()->defaultProfile()->id()); // FIXME: Extract from rc.
sp.attachPID = rc->applicationProcessHandle().pid();
sp.displayName = tr("Debugger attached to %1").arg(rc->displayName());
sp.startMode = AttachExternal;
sp.closeMode = DetachAtClose;
- sp.toolChainAbi = rc->abi();
if (DebuggerRunControl *rc = createDebugger(sp))
startDebugger(rc);
}
@@ -1592,20 +1579,13 @@ void DebuggerPluginPrivate::attachCore()
setConfigValue(_("LastExternalProfileIndex"), QVariant(dlg.profileIndex()));
setConfigValue(_("LastExternalStartScript"), dlg.overrideStartScript());
- Profile *profile = dlg.profile();
- QTC_ASSERT(profile, return);
- ToolChain *tc = ToolChainProfileInformation::toolChain(profile);
- QTC_ASSERT(tc, return);
-
DebuggerStartParameters sp;
+ fillParameters(&sp, dlg.profileId());
sp.executable = dlg.executableFile();
sp.coreFile = dlg.coreFile();
sp.displayName = tr("Core file \"%1\"").arg(dlg.coreFile());
sp.startMode = AttachCore;
sp.closeMode = DetachAtClose;
- sp.debuggerCommand = DebuggerProfileInformation::debuggerCommand(profile).toString();
- sp.toolChainAbi = tc->targetAbi();
- sp.sysroot = SysRootProfileInformation::sysRoot(profile).toString();
sp.overrideStartScript = dlg.overrideStartScript();
if (DebuggerRunControl *rc = createDebugger(sp))
startDebugger(rc);
@@ -1613,26 +1593,47 @@ void DebuggerPluginPrivate::attachCore()
void DebuggerPluginPrivate::attachToRemoteServer(const QString &spec)
{
- // spec is: server:port@executable@architecture
+ // spec is: profile@server:port@executable@architecture
+ const QChar delim(QLatin1Char('@'));
DebuggerStartParameters sp;
- sp.remoteChannel = spec.section(QLatin1Char('@'), 0, 0);
- sp.executable = spec.section(QLatin1Char('@'), 1, 1);
- sp.remoteArchitecture = spec.section(QLatin1Char('@'), 2, 2);
+ fillParameters(&sp, Id(spec.section(delim, 0, 0)));
+ sp.remoteChannel = spec.section(delim, 1, 1);
+ sp.executable = spec.section(delim, 2, 2);
+ sp.remoteArchitecture = spec.section(delim, 3, 3);
sp.displayName = tr("Remote: \"%1\"").arg(sp.remoteChannel);
sp.startMode = AttachToRemoteServer;
sp.closeMode = KillAtClose;
- sp.toolChainAbi = anyAbiOfBinary(sp.executable);
if (DebuggerRunControl *rc = createDebugger(sp))
startDebugger(rc);
}
+struct RemoteCdbMatcher : ProfileMatcher
+{
+ RemoteCdbMatcher() : m_hostAbi(Abi::hostAbi()) {}
+
+ bool matches(const Profile *profile) const
+ {
+ ToolChain *tc = ToolChainProfileInformation::toolChain(profile);
+ QTC_ASSERT(tc, return false);
+ Abi abi = tc->targetAbi();
+ return abi.architecture() == m_hostAbi.architecture()
+ && abi.os() == Abi::WindowsOS
+ && abi.osFlavor() == Abi::WindowsMsvc2010Flavor
+ && abi.binaryFormat() == Abi::PEFormat
+ && abi.wordWidth() == m_hostAbi.wordWidth();
+ }
+
+ Abi m_hostAbi;
+};
+
void DebuggerPluginPrivate::startRemoteCdbSession()
{
const QString connectionKey = _("CdbRemoteConnection");
DebuggerStartParameters sp;
- Abi hostAbi = Abi::hostAbi();
- sp.toolChainAbi = Abi(hostAbi.architecture(), Abi::WindowsOS,
- Abi::WindowsMsvc2010Flavor, Abi::PEFormat, hostAbi.wordWidth());
+ RemoteCdbMatcher matcher;
+ Profile *profile = ProfileManager::instance()->find(&matcher);
+ QTC_ASSERT(profile, return);
+ fillParameters(&sp, profile->id());
sp.startMode = AttachToRemoteServer;
sp.closeMode = KillAtClose;
StartRemoteCdbDialog dlg(mainWindow());
@@ -1648,13 +1649,10 @@ void DebuggerPluginPrivate::startRemoteCdbSession()
startDebugger(rc);
}
-bool DebuggerPluginPrivate::queryRemoteParameters(DebuggerStartParameters &sp, bool useScript)
-{
- return StartRemoteDialog::run(mainWindow(),
- m_coreSettings,
- useScript,
- &sp);
-}
+//bool DebuggerPluginPrivate::queryRemoteParameters(DebuggerStartParameters &sp, bool useScript)
+//{
+// return StartRemoteDialog::run(mainWindow(), m_coreSettings, useScript, &sp);
+//}
void DebuggerPluginPrivate::startRemoteProcess()
{
@@ -1688,13 +1686,13 @@ void DebuggerPluginPrivate::startRemoteServer()
}
void DebuggerPluginPrivate::gdbServerStarted(const QString &channel,
- const QString &sysroot,
+ const QString &profileId,
const QString &remoteCommandLine,
const QString &remoteExecutable)
{
Q_UNUSED(remoteCommandLine);
Q_UNUSED(remoteExecutable);
- Q_UNUSED(sysroot);
+ Q_UNUSED(profileId);
showStatusMessage(tr("gdbserver is now listening at %1").arg(channel));
}
@@ -1710,12 +1708,10 @@ void DebuggerPluginPrivate::loadRemoteCoreFile()
dlg.setLocalCoreFileName(sp.coreFile);
if (!dlg.exec())
return;
+ fillParameters(&sp, dlg.profileId());
sp.displayName = tr("Core file \"%1\"").arg(sp.coreFile);
sp.startMode = AttachCore;
sp.closeMode = DetachAtClose;
- //sp.debuggerCommand = dlg.debuggerCommand();
- //sp.toolChainAbi = dlg.abi();
- sp.sysroot = dlg.sysroot();
//sp.overrideStartScript = dlg.overrideStartScript();
if (DebuggerRunControl *rc = createDebugger(sp))
startDebugger(rc);
@@ -1730,10 +1726,13 @@ void DebuggerPluginPrivate::attachToRemoteProcess()
}
void DebuggerPluginPrivate::attachedToProcess(const QString &channel,
- const QString &sysroot,
+ const QString &profileId,
const QString &remoteCommandLine,
const QString &remoteExecutable)
{
+ Profile *profile = ProfileManager::instance()->find(Id(profileId));
+ QTC_ASSERT(profile, return);
+ QString sysroot = SysRootProfileInformation::sysRoot(profile).toString();
QString binary;
QString localExecutable;
QString candidate = sysroot + remoteExecutable;
@@ -1771,11 +1770,9 @@ void DebuggerPluginPrivate::attachedToProcess(const QString &channel,
}
DebuggerStartParameters sp;
- sp.toolChainAbi = abis.at(0);
- //sp.remoteArchitecture = abis.at(0).toString();
+ fillParameters(&sp, Id(profileId));
sp.displayName = tr("Remote: \"%1\"").arg(channel);
sp.remoteChannel = channel;
- sp.sysroot = sysroot;
sp.executable = localExecutable;
sp.startMode = AttachToRemoteServer;
sp.closeMode = KillAtClose;
@@ -1806,20 +1803,20 @@ void DebuggerPluginPrivate::attachToQmlPort()
dlg.setPort(sp.qmlServerPort);
}
- const QVariant sysrootPath = configValue(_("LastSysroot"));
- if (sysrootPath.isValid())
- dlg.setSysroot(sysrootPath.toString());
+ const QVariant profileId = configValue(_("LastProfile"));
+ if (profileId.isValid())
+ dlg.setProfileId(Id(profileId.toString()));
if (dlg.exec() != QDialog::Accepted)
return;
setConfigValue(_("LastQmlServerAddress"), dlg.host());
setConfigValue(_("LastQmlServerPort"), dlg.port());
- setConfigValue(_("LastSysroot"), dlg.sysroot());
+ setConfigValue(_("LastProfile"), dlg.profileId().toString());
+ fillParameters(&sp, dlg.profileId());
sp.qmlServerAddress = dlg.host();
sp.qmlServerPort = dlg.port();
- sp.sysroot = dlg.sysroot();
sp.startMode = AttachToRemoteProcess;
sp.closeMode = KillAtClose;
@@ -2731,8 +2728,9 @@ static QString formatStartParameters(DebuggerStartParameters &sp)
str.setIntegerBase(10);
}
}
- if (!sp.debuggerCommand.isEmpty())
- str << "Debugger: " << QDir::toNativeSeparators(sp.debuggerCommand) << '\n';
+ QString cmd = sp.debuggerCommand;
+ if (!cmd.isEmpty())
+ str << "Debugger: " << QDir::toNativeSeparators(cmd) << '\n';
if (!sp.coreFile.isEmpty())
str << "Core: " << QDir::toNativeSeparators(sp.coreFile) << '\n';
if (sp.attachPID > 0)
@@ -2762,7 +2760,7 @@ static QString formatStartParameters(DebuggerStartParameters &sp)
}
if (!sp.gnuTarget.isEmpty())
str << "Gnu target: " << sp.gnuTarget << '\n';
- str << "Sysroot: " << sp.sysroot << '\n';
+ str << "Sysroot: " << sp.sysRoot << '\n';
str << "Debug Source Location: " << sp.debugSourceLocation.join(QLatin1String(":")) << '\n';
str << "Symbol file: " << sp.symbolFileName << '\n';
if (sp.useServerStartScript)
@@ -2819,61 +2817,6 @@ void DebuggerPluginPrivate::remoteCommand(const QStringList &options,
runScheduled();
}
-QString DebuggerPluginPrivate::debuggerForAbi(const Abi &abi, DebuggerEngineType et) const
-{
- enum { debug = 0 };
- QList<Abi> searchAbis;
- searchAbis.push_back(abi);
- // Pick the right tool chain in case cdb/gdb were started with other tool chains.
- // Also, lldb should be preferred over gdb.
- if (abi.os() == Abi::WindowsOS) {
- switch (et) {
- case CdbEngineType:
- searchAbis.clear();
- searchAbis.push_back(Abi(abi.architecture(), abi.os(),
- Abi::WindowsMsvc2010Flavor, abi.binaryFormat(), abi.wordWidth()));
- searchAbis.push_back(Abi(abi.architecture(), abi.os(),
- Abi::WindowsMsvc2008Flavor, abi.binaryFormat(), abi.wordWidth()));
- searchAbis.push_back(Abi(abi.architecture(), abi.os(),
- Abi::WindowsMsvc2005Flavor, abi.binaryFormat(), abi.wordWidth()));
- break;
- case GdbEngineType:
- searchAbis.clear();
- searchAbis.push_back(Abi(abi.architecture(), abi.os(),
- Abi::WindowsMSysFlavor, abi.binaryFormat(), abi.wordWidth()));
- break;
- default:
- break;
- }
- }
- if (debug)
- qDebug() << "debuggerForAbi" << abi.toString() << searchAbis.size()
- << searchAbis.front().toString() << et;
-
- QList<Profile *> profileList = ProfileManager::instance()->profiles();
- // Note: stList is not sorted with autodected first!
- QStringList debuggerList;
- foreach (Profile *p, profileList) {
- if (!p->isValid())
- continue;
- ToolChain *tc = ProjectExplorer::ToolChainProfileInformation::toolChain(p);
- if (!tc)
- continue;
- if (searchAbis.contains(tc->targetAbi())) {
- const QString debugger = DebuggerProfileInformation::debuggerCommand(p).toString();
- if (!debugger.isEmpty()) {
- if (p->isAutoDetected())
- debuggerList.append(debugger);
- else
- debuggerList.prepend(debugger);
- }
- }
- }
- if (!debuggerList.isEmpty())
- return debuggerList.at(0);
- return QString();
-}
-
DebuggerLanguages DebuggerPluginPrivate::activeLanguages() const
{
QTC_ASSERT(m_mainWindow, return AnyLanguage);
@@ -3738,12 +3681,12 @@ static Target *activeTarget()
return project->activeTarget();
}
-static ToolChain *currentToolChain()
+static Id currentProfileId()
{
Target *t = activeTarget();
if (!t || !t->isEnabled())
return 0;
- return ToolChainProfileInformation::toolChain(activeTarget()->profile());
+ return activeTarget()->profile()->id();
}
static LocalApplicationRunConfiguration *activeLocalRunConfiguration()
@@ -3793,7 +3736,7 @@ void DebuggerPluginPrivate::testPythonDumpers1()
void DebuggerPluginPrivate::testPythonDumpers2()
{
DebuggerStartParameters sp;
- sp.toolChainAbi = currentToolChain()->targetAbi();
+ fillParameters(&sp, currentProfileId());
sp.executable = activeLocalRunConfiguration()->executable();
testRunProject(sp, TestCallBack(this, "testPythonDumpers3"));
}
@@ -3825,7 +3768,7 @@ void DebuggerPluginPrivate::testStateMachine1()
void DebuggerPluginPrivate::testStateMachine2()
{
DebuggerStartParameters sp;
- sp.toolChainAbi = currentToolChain()->targetAbi();
+ fillParameters(&sp, currentProfileId());
sp.executable = activeLocalRunConfiguration()->executable();
sp.testCase = TestNoBoundsOfCurrentFunction;
testRunProject(sp, TestCallBack(this, "testStateMachine3"));
diff --git a/src/plugins/debugger/debuggerrunner.cpp b/src/plugins/debugger/debuggerrunner.cpp
index 4f9f7a1ac8..5852a641a3 100644
--- a/src/plugins/debugger/debuggerrunner.cpp
+++ b/src/plugins/debugger/debuggerrunner.cpp
@@ -158,7 +158,7 @@ static inline QString msgEngineNotAvailable(DebuggerEngineType et)
//
////////////////////////////////////////////////////////////////////////
-class DebuggerRunConfigWidget : public ProjectExplorer::RunConfigWidget
+class DebuggerRunConfigWidget : public RunConfigWidget
{
Q_OBJECT
@@ -323,7 +323,7 @@ DebuggerRunControlPrivate::DebuggerRunControlPrivate(DebuggerRunControl *parent,
DebuggerRunControl::DebuggerRunControl(RunConfiguration *runConfiguration,
const DebuggerStartParameters &sp,
const QPair<DebuggerEngineType, DebuggerEngineType> &masterSlaveEngineTypes)
- : RunControl(runConfiguration, ProjectExplorer::DebugRunMode),
+ : RunControl(runConfiguration, DebugRunMode),
d(new DebuggerRunControlPrivate(this, runConfiguration))
{
connect(this, SIGNAL(finished()), SLOT(handleFinished()));
@@ -671,12 +671,6 @@ static QList<DebuggerEngineType> engineTypes(const DebuggerStartParameters &sp)
return result;
}
- // FIXME: 1 of 3 testing hacks.
- if (sp.processArgs.startsWith(QLatin1String("@tcf@ "))) {
- result.push_back(GdbEngineType);
- return result;
- }
-
if (sp.startMode != AttachToRemoteServer
&& sp.startMode != AttachToRemoteProcess
&& sp.startMode != LoadRemoteCore
@@ -743,8 +737,9 @@ static inline bool canUseEngine(DebuggerEngineType et,
DEBUGGER_EXPORT ConfigurationCheck checkDebugConfiguration(const DebuggerStartParameters &sp)
{
ConfigurationCheck result;
+ QString abi = sp.toolChainAbi.toString();
if (debug)
- qDebug().nospace() << "checkDebugConfiguration " << sp.toolChainAbi.toString()
+ qDebug().nospace() << "checkDebugConfiguration " << abi
<< " Start mode=" << sp.startMode << " Executable=" << sp.executable
<< " Debugger command=" << sp.debuggerCommand;
// Get all applicable types.
@@ -780,12 +775,12 @@ DEBUGGER_EXPORT ConfigurationCheck checkDebugConfiguration(const DebuggerStartPa
result.errorMessage = DebuggerPlugin::tr(
"The debugger engine '%1' required for debugging binaries of the type '%2'"
" is not configured correctly.").
- arg(QLatin1String(engineTypeName(requiredTypes.front())), sp.toolChainAbi.toString());
+ arg(QLatin1String(engineTypeName(requiredTypes.front())), abi);
} else {
result.errorMessage = DebuggerPlugin::tr(
"None of the debugger engines '%1' capable of debugging binaries of the type '%2'"
" is configured correctly.").
- arg(engineTypeNames(requiredTypes), sp.toolChainAbi.toString());
+ arg(engineTypeNames(requiredTypes), abi);
}
return result;
}
@@ -796,7 +791,7 @@ DEBUGGER_EXPORT ConfigurationCheck checkDebugConfiguration(const DebuggerStartPa
const QString msg = DebuggerPlugin::tr(
"The preferred debugger engine for debugging binaries of type '%1' is not available.\n"
"The debugger engine '%2' will be used as a fallback.\nDetails: %3").
- arg(sp.toolChainAbi.toString(), QLatin1String(engineTypeName(usableType)),
+ arg(abi, QLatin1String(engineTypeName(usableType)),
result.errorDetails.join(QString(QLatin1Char('\n'))));
debuggerCore()->showMessage(msg, LogWarning);
showMessageBox(QMessageBox::Warning, DebuggerPlugin::tr("Warning"), msg);
@@ -880,6 +875,9 @@ static DebuggerStartParameters localStartParameters(RunConfiguration *runConfigu
qobject_cast<LocalApplicationRunConfiguration *>(runConfiguration);
QTC_ASSERT(rc, return sp);
+ Target *target = runConfiguration->target();
+ Profile *profile = target ? target->profile() : ProfileManager::instance()->defaultProfile();
+ fillParameters(&sp, profile->id());
sp.environment = rc->environment();
sp.workingDirectory = rc->workingDirectory();
@@ -893,17 +891,11 @@ static DebuggerStartParameters localStartParameters(RunConfiguration *runConfigu
return sp;
sp.startMode = StartInternal;
sp.processArgs = rc->commandLineArguments();
- sp.toolChainAbi = rc->abi();
- if (!sp.toolChainAbi.isValid()) {
- QList<Abi> abis = Abi::abisOfBinary(Utils::FileName::fromString(sp.executable));
- if (!abis.isEmpty())
- sp.toolChainAbi = abis.at(0);
- }
sp.useTerminal = rc->runMode() == LocalApplicationRunConfiguration::Console;
sp.dumperLibrary = rc->dumperLibrary();
sp.dumperLibraryLocations = rc->dumperLibraryLocations();
- if (const ProjectExplorer::Target *target = runConfiguration->target()) {
+ if (target) {
if (QByteArray(target->metaObject()->className()).contains("Qt4")) {
// FIXME: Get this from the profile?
// We could query the QtVersion for this information directly, but then we
@@ -915,13 +907,10 @@ static DebuggerStartParameters localStartParameters(RunConfiguration *runConfigu
if (!qmake.isEmpty())
sp.qtInstallPath = findQtInstallPath(qmake);
}
- if (const ProjectExplorer::Project *project = target->project()) {
+ if (const Project *project = target->project()) {
sp.projectSourceDirectory = project->projectDirectory();
- if (const ProjectExplorer::BuildConfiguration *buildConfig = target->activeBuildConfiguration()) {
+ if (const BuildConfiguration *buildConfig = target->activeBuildConfiguration())
sp.projectBuildDirectory = buildConfig->buildDirectory();
- const ProjectExplorer::Profile *p = runConfiguration->target()->profile();
- sp.debuggerCommand = DebuggerProfileInformation::debuggerCommand(p).toString();
- }
sp.projectSourceFiles = project->files(Project::ExcludeGeneratedFiles);
}
}
diff --git a/src/plugins/debugger/debuggerstartparameters.h b/src/plugins/debugger/debuggerstartparameters.h
index ff5f51ec1d..51a5bd51b4 100644
--- a/src/plugins/debugger/debuggerstartparameters.h
+++ b/src/plugins/debugger/debuggerstartparameters.h
@@ -36,6 +36,7 @@
#include "debugger_global.h"
#include "debuggerconstants.h"
+#include <coreplugin/id.h>
#include <ssh/sshconnection.h>
#include <utils/environment.h>
#include <projectexplorer/abi.h>
@@ -77,6 +78,12 @@ public:
testCase(0)
{}
+ //Core::Id profileId;
+
+ QString sysRoot;
+ QString debuggerCommand;
+ ProjectExplorer::Abi toolChainAbi;
+
QString executable;
QString displayName; // Used in the Snapshots view.
QString startMessage; // First status message shown.
@@ -111,7 +118,7 @@ public:
QString symbolFileName;
bool useServerStartScript;
QString serverStartScript;
- QString sysroot;
+ //QString sysroot;
QString searchPath; // Gdb "set solib-search-path"
QString debugInfoLocation; // Gdb "set-debug-file-directory".
QStringList debugSourceLocation; // Gdb "directory"
@@ -122,8 +129,8 @@ public:
QSsh::SshConnectionParameters connParams;
bool remoteSetupNeeded;
- QString debuggerCommand;
- ProjectExplorer::Abi toolChainAbi;
+ //QString debuggerCommand;
+ //ProjectExplorer::Abi toolChainAbi;
QString dumperLibrary;
QStringList solibSearchPath;
@@ -143,6 +150,11 @@ public:
int testCase;
};
+namespace Internal {
+
+void fillParameters(DebuggerStartParameters *sp, Core::Id id);
+
+} // namespace Internal
} // namespace Debugger
Q_DECLARE_METATYPE(Debugger::DebuggerStartParameters)
diff --git a/src/plugins/debugger/debuggertoolchaincombobox.cpp b/src/plugins/debugger/debuggertoolchaincombobox.cpp
index 96a079fdfc..169a817d22 100644
--- a/src/plugins/debugger/debuggertoolchaincombobox.cpp
+++ b/src/plugins/debugger/debuggertoolchaincombobox.cpp
@@ -47,14 +47,13 @@
using namespace ProjectExplorer;
namespace Debugger {
-namespace Internal {
-DebuggerToolChainComboBox::DebuggerToolChainComboBox(QWidget *parent) :
+ProfileChooser::ProfileChooser(QWidget *parent) :
QComboBox(parent)
{
}
-void DebuggerToolChainComboBox::init(bool hostAbiOnly)
+void ProfileChooser::init(bool hostAbiOnly)
{
const Abi hostAbi = Abi::hostAbi();
foreach (const Profile *st, ProfileManager::instance()->profiles()) {
@@ -85,23 +84,12 @@ void DebuggerToolChainComboBox::init(bool hostAbiOnly)
setEnabled(count() > 1);
}
-void DebuggerToolChainComboBox::setCurrentProfile(const Profile *profile)
-{
- QTC_ASSERT(profile->isValid(), return);
- for (int i = 0, n = count(); i != n; ++i) {
- if (profileAt(i) == profile) {
- setCurrentIndex(i);
- break;
- }
- }
-}
-
-Profile *DebuggerToolChainComboBox::currentProfile() const
+Profile *ProfileChooser::currentProfile() const
{
return profileAt(currentIndex());
}
-void DebuggerToolChainComboBox::setCurrentProfileId(Core::Id id)
+void ProfileChooser::setCurrentProfileId(Core::Id id)
{
for (int i = 0, n = count(); i != n; ++i) {
if (profileAt(i)->id() == id) {
@@ -111,16 +99,15 @@ void DebuggerToolChainComboBox::setCurrentProfileId(Core::Id id)
}
}
-Core::Id DebuggerToolChainComboBox::currentProfileId() const
+Core::Id ProfileChooser::currentProfileId() const
{
return profileAt(currentIndex())->id();
}
-Profile *DebuggerToolChainComboBox::profileAt(int index) const
+Profile *ProfileChooser::profileAt(int index) const
{
Core::Id id = qvariant_cast<Core::Id>(itemData(index));
return ProfileManager::instance()->find(id);
}
} // namespace Debugger
-} // namespace Internal
diff --git a/src/plugins/debugger/debuggertoolchaincombobox.h b/src/plugins/debugger/debuggertoolchaincombobox.h
index d4dcf16bbd..164f5b11ae 100644
--- a/src/plugins/debugger/debuggertoolchaincombobox.h
+++ b/src/plugins/debugger/debuggertoolchaincombobox.h
@@ -33,28 +33,28 @@
#ifndef DEBUGGERTOOLCHAINCOMBOBOX_H
#define DEBUGGERTOOLCHAINCOMBOBOX_H
+#include "debugger_global.h"
+
#include <QComboBox>
namespace Core { class Id; }
namespace ProjectExplorer { class Profile; }
namespace Debugger {
-namespace Internal {
-// Let the user pick a profile associated with a debugger.
-class DebuggerToolChainComboBox : public QComboBox
+// Let the user pick a profile.
+class DEBUGGER_EXPORT ProfileChooser : public QComboBox
{
Q_OBJECT
public:
- explicit DebuggerToolChainComboBox(QWidget *parent);
+ explicit ProfileChooser(QWidget *parent);
void init(bool hostAbiOnly);
void setCurrentProfileId(Core::Id id);
Core::Id currentProfileId() const;
- void setCurrentProfile(const ProjectExplorer::Profile *profile);
ProjectExplorer::Profile *currentProfile() const;
private:
@@ -62,6 +62,5 @@ private:
};
} // namespace Debugger
-} // namespace Internal
#endif // DEBUGGERTOOLCHAINCOMBOBOX_H
diff --git a/src/plugins/debugger/disassembleragent.cpp b/src/plugins/debugger/disassembleragent.cpp
index ed141a11a5..9e0c7fbcb9 100644
--- a/src/plugins/debugger/disassembleragent.cpp
+++ b/src/plugins/debugger/disassembleragent.cpp
@@ -32,12 +32,13 @@
#include "disassembleragent.h"
-#include "disassemblerlines.h"
#include "breakhandler.h"
+#include "debuggercore.h"
#include "debuggerengine.h"
#include "debuggerinternalconstants.h"
-#include "debuggercore.h"
+#include "debuggerstartparameters.h"
#include "debuggerstringutils.h"
+#include "disassemblerlines.h"
#include "stackframe.h"
#include <coreplugin/coreconstants.h>
@@ -45,6 +46,8 @@
#include <coreplugin/icore.h>
#include <coreplugin/mimedatabase.h>
+#include <projectexplorer/abi.h>
+
#include <texteditor/basetextdocument.h>
#include <texteditor/basetexteditor.h>
#include <texteditor/basetextmark.h>
@@ -116,6 +119,7 @@ public:
QList<ITextMark *> breakpointMarks;
QList<CacheEntry> cache;
QString mimeType;
+ bool tryMixedInitialized;
bool tryMixed;
bool resetLocationScheduled;
};
@@ -124,6 +128,7 @@ DisassemblerAgentPrivate::DisassemblerAgentPrivate()
: editor(0),
locationMark(0),
mimeType(_("text/x-qtcreator-generic-asm")),
+ tryMixedInitialized(false),
tryMixed(true),
resetLocationScheduled(false)
{
@@ -214,6 +219,12 @@ const Location &DisassemblerAgent::location() const
bool DisassemblerAgent::isMixed() const
{
+ if (!d->tryMixedInitialized) {
+ if (d->engine->startParameters().toolChainAbi.os() == ProjectExplorer::Abi::MacOS)
+ d->tryMixed = false;
+ d->tryMixedInitialized = true;
+ }
+
return d->tryMixed
&& d->location.lineNumber() > 0
&& !d->location.functionName().isEmpty()
@@ -406,10 +417,5 @@ quint64 DisassemblerAgent::address() const
return d->location.address();
}
-void DisassemblerAgent::setTryMixed(bool on)
-{
- d->tryMixed = on;
-}
-
} // namespace Internal
} // namespace Debugger
diff --git a/src/plugins/debugger/disassembleragent.h b/src/plugins/debugger/disassembleragent.h
index 88365f5b84..013a1d1874 100644
--- a/src/plugins/debugger/disassembleragent.h
+++ b/src/plugins/debugger/disassembleragent.h
@@ -53,7 +53,6 @@ public:
explicit DisassemblerAgent(DebuggerEngine *engine);
~DisassemblerAgent();
- void setTryMixed(bool on);
void setLocation(const Location &location);
const Location &location() const;
void scheduleResetLocation();
diff --git a/src/plugins/debugger/gdb/gdbengine.cpp b/src/plugins/debugger/gdb/gdbengine.cpp
index f25f381eaa..1b981c9414 100644
--- a/src/plugins/debugger/gdb/gdbengine.cpp
+++ b/src/plugins/debugger/gdb/gdbengine.cpp
@@ -1182,7 +1182,8 @@ void GdbEngine::handleResultRecord(GdbResponse *response)
if (!isExpectedResult) {
const DebuggerStartParameters &sp = startParameters();
- if (sp.toolChainAbi.os() == Abi::WindowsOS
+ Abi abi = sp.toolChainAbi;
+ if (abi.os() == Abi::WindowsOS
&& cmd.command.startsWith("attach")
&& (sp.startMode == AttachExternal || sp.useTerminal))
{
@@ -1628,7 +1629,6 @@ void GdbEngine::handleStop2(const GdbMi &data)
const QByteArray reason = data.findChild("reason").data();
const QByteArray func = data.findChild("frame").findChild("from").data();
const DebuggerStartParameters &sp = startParameters();
- const Abi abi = sp.toolChainAbi;
bool isStopperThread = false;
@@ -1644,7 +1644,7 @@ void GdbEngine::handleStop2(const GdbMi &data)
return;
}
- if (abi.os() == Abi::WindowsOS
+ if (sp.toolChainAbi.os() == Abi::WindowsOS
&& sp.useTerminal
&& reason == "signal-received"
&& data.findChild("signal-name").data() == "SIGTRAP")
@@ -1934,7 +1934,7 @@ QString GdbEngine::cleanupFullName(const QString &fileName)
if (!debuggerCore()->boolSetting(AutoEnrichParameters))
return cleanFilePath;
- const QString sysroot = startParameters().sysroot;
+ const QString sysroot = startParameters().sysRoot;
if (QFileInfo(cleanFilePath).isReadable())
return cleanFilePath;
if (!sysroot.isEmpty() && fileName.startsWith(QLatin1Char('/'))) {
@@ -2068,6 +2068,7 @@ void GdbEngine::handleThreadGroupCreated(const GdbMi &result)
{
QByteArray id = result.findChild("id").data();
QByteArray pid = result.findChild("pid").data();
+ Q_UNUSED(id);
Q_UNUSED(pid);
}
@@ -2081,7 +2082,7 @@ int GdbEngine::currentFrame() const
return stackHandler()->currentIndex();
}
-QString msgNoGdbBinaryForToolChain(const Abi &tc)
+static QString msgNoGdbBinaryForToolChain(const Abi &tc)
{
return GdbEngine::tr("There is no gdb binary available for binaries in format '%1'")
.arg(tc.toString());
@@ -4634,27 +4635,21 @@ static QString gdbBinary(const DebuggerStartParameters &sp)
const QByteArray envBinary = qgetenv("QTC_DEBUGGER_PATH");
if (!envBinary.isEmpty())
return QString::fromLocal8Bit(envBinary);
- // 2) Command explicitly specified.
- if (!sp.debuggerCommand.isEmpty()) {
- // Do not use a CDB binary if we got started for a project with MSVC runtime.
- const Abi abi = sp.toolChainAbi;
- if (abi.os() != Abi::WindowsOS || abi.osFlavor() == Abi::WindowsMSysFlavor)
- return sp.debuggerCommand;
- }
- // 3) Find one from tool chains.
- return debuggerCore()->debuggerForAbi(sp.toolChainAbi, GdbEngineType);
+ // 2) Command from profile.
+ return sp.debuggerCommand;
}
bool checkGdbConfiguration(const DebuggerStartParameters &sp, ConfigurationCheck *check)
{
const QString binary = gdbBinary(sp);
- if (gdbBinary(sp).isEmpty()) {
- check->errorDetails.push_back(msgNoGdbBinaryForToolChain(sp.toolChainAbi));
+ const Abi abi = sp.toolChainAbi;
+ if (binary.isEmpty()) {
+ check->errorDetails.push_back(msgNoGdbBinaryForToolChain(abi));
check->settingsCategory = _(ProjectExplorer::Constants::PROJECTEXPLORER_SETTINGS_CATEGORY);
check->settingsPage = _(ProjectExplorer::Constants::PROJECTEXPLORER_SETTINGS_CATEGORY);
return false;
}
- if (sp.toolChainAbi.os() == Abi::WindowsOS && !QFileInfo(binary).isAbsolute()) {
+ if (abi.os() == Abi::WindowsOS && !QFileInfo(binary).isAbsolute()) {
// See initialization below, we need an absolute path to be able to locate Python on Windows.
check->errorDetails.push_back(GdbEngine::tr("The gdb location must be given as an "
"absolute path in the debugger settings (%1).").arg(binary));
@@ -4818,7 +4813,7 @@ void GdbEngine::startGdb(const QStringList &args)
foreach (const QString &src, sp.debugSourceLocation)
postCommand("directory " + src.toLocal8Bit());
- const QByteArray sysroot = sp.sysroot.toLocal8Bit();
+ const QByteArray sysroot = sp.sysRoot.toLocal8Bit();
if (!sysroot.isEmpty()) {
postCommand("set sysroot " + sysroot);
// sysroot is not enough to correctly locate the sources, so explicitly
diff --git a/src/plugins/debugger/gdb/remoteplaingdbadapter.cpp b/src/plugins/debugger/gdb/remoteplaingdbadapter.cpp
index fb92ee51cb..01aaefa07f 100644
--- a/src/plugins/debugger/gdb/remoteplaingdbadapter.cpp
+++ b/src/plugins/debugger/gdb/remoteplaingdbadapter.cpp
@@ -105,11 +105,12 @@ void GdbRemotePlainEngine::notifyEngineRemoteSetupDone(int gdbServerPort, int qm
Q_UNUSED(gdbServerPort);
QTC_ASSERT(state() == EngineSetupRequested, qDebug() << state());
+ DebuggerStartParameters &sp = startParameters();
if (qmlPort != -1)
- startParameters().qmlServerPort = qmlPort;
- m_gdbProc.realStart(startParameters().debuggerCommand,
+ sp.qmlServerPort = qmlPort;
+ m_gdbProc.realStart(sp.debuggerCommand,
QStringList() << QLatin1String("-i") << QLatin1String("mi"),
- startParameters().executable);
+ sp.executable);
}
void GdbRemotePlainEngine::handleGdbStarted()
diff --git a/src/plugins/debugger/loadremotecoredialog.cpp b/src/plugins/debugger/loadremotecoredialog.cpp
index ab6ef56680..259d286747 100644
--- a/src/plugins/debugger/loadremotecoredialog.cpp
+++ b/src/plugins/debugger/loadremotecoredialog.cpp
@@ -31,9 +31,11 @@
**************************************************************************/
#include "loadremotecoredialog.h"
-#include "debuggerstartparameters.h"
+
#include "debuggerconstants.h"
#include "debuggercore.h"
+#include "debuggerstartparameters.h"
+#include "debuggertoolchaincombobox.h"
#include <coreplugin/icore.h>
#include <projectexplorer/abi.h>
@@ -93,7 +95,8 @@ public:
QPushButton *loadCoreFileButton;
QTextBrowser *textBrowser;
QPushButton *closeButton;
- PathChooser *sysrootPathChooser;
+ //PathChooser *sysrootPathChooser;
+ ProfileChooser *toolchainComboBox;
QSettings *settings;
QString remoteCommandLine;
@@ -113,11 +116,7 @@ LoadRemoteCoreFileDialog::LoadRemoteCoreFileDialog(QWidget *parent)
d->deviceComboBox = new QComboBox(this);
- d->sysrootPathChooser = new PathChooser(this);
- d->sysrootPathChooser->setExpectedKind(PathChooser::Directory);
- d->sysrootPathChooser->setPromptDialogTitle(tr("Select Sysroot"));
- d->sysrootPathChooser->setPath(d->settings->value(QLatin1String("LastSysroot")).toString());
-
+ d->toolchainComboBox = new ProfileChooser(this);
d->fileSystemModel = new SftpFileSystemModel(this);
//executablePathChooser = new PathChooser(q);
@@ -143,7 +142,7 @@ LoadRemoteCoreFileDialog::LoadRemoteCoreFileDialog(QWidget *parent)
QFormLayout *formLayout = new QFormLayout();
formLayout->addRow(tr("Device:"), d->deviceComboBox);
- formLayout->addRow(tr("Sysroot:"), d->sysrootPathChooser);
+ formLayout->addRow(tr("Profile:"), d->toolchainComboBox);
QHBoxLayout *horizontalLayout2 = new QHBoxLayout();
horizontalLayout2->addStretch(1);
@@ -169,8 +168,7 @@ LoadRemoteCoreFileDialog::LoadRemoteCoreFileDialog(QWidget *parent)
connect(d->fileSystemView->selectionModel(),
SIGNAL(selectionChanged(QItemSelection,QItemSelection)),
SLOT(updateButtons()));
- connect(d->sysrootPathChooser, SIGNAL(changed(QString)),
- SLOT(updateButtons()));
+ connect(d->toolchainComboBox, SIGNAL(activated(int)), SLOT(updateButtons()));
connect(d->loadCoreFileButton, SIGNAL(clicked()), SLOT(selectCoreFile()));
connect(d->deviceComboBox, SIGNAL(currentIndexChanged(int)),
SLOT(attachToDevice(int)));
@@ -194,9 +192,9 @@ QString LoadRemoteCoreFileDialog::localCoreFileName() const
return d->localCoreFile;
}
-QString LoadRemoteCoreFileDialog::sysroot() const
+Id LoadRemoteCoreFileDialog::profileId() const
{
- return d->sysrootPathChooser->path();
+ return d->toolchainComboBox->currentProfileId();
}
void LoadRemoteCoreFileDialog::attachToDevice(int modelIndex)
@@ -251,7 +249,8 @@ void LoadRemoteCoreFileDialog::selectCoreFile()
d->loadCoreFileButton->setEnabled(false);
d->fileSystemView->setEnabled(false);
- d->settings->setValue(QLatin1String("LastSysroot"), d->sysrootPathChooser->path());
+ d->settings->setValue(QLatin1String("LastProfile"),
+ d->toolchainComboBox->currentProfileId().toString());
d->settings->setValue(QLatin1String("LastDevice"), d->deviceComboBox->currentIndex());
d->settings->setValue(QLatin1String("LastSftpRoot"), d->fileSystemModel->rootDirectory());
diff --git a/src/plugins/debugger/loadremotecoredialog.h b/src/plugins/debugger/loadremotecoredialog.h
index 272b1a3e22..54ac361aa6 100644
--- a/src/plugins/debugger/loadremotecoredialog.h
+++ b/src/plugins/debugger/loadremotecoredialog.h
@@ -37,6 +37,8 @@
#include <QDialog>
+namespace Core { class Id; }
+
namespace Debugger {
namespace Internal {
@@ -52,7 +54,7 @@ public:
void setLocalCoreFileName(const QString &fileName);
QString localCoreFileName() const;
- QString sysroot() const;
+ Core::Id profileId() const;
private slots:
void handleSftpOperationFinished(QSsh::SftpJobId, const QString &error);
diff --git a/src/plugins/debugger/startexternaldialog.ui b/src/plugins/debugger/startexternaldialog.ui
index 9e1807dafe..2a32e88cf8 100644
--- a/src/plugins/debugger/startexternaldialog.ui
+++ b/src/plugins/debugger/startexternaldialog.ui
@@ -80,7 +80,7 @@
<item row="4" column="0">
<widget class="QLabel" name="toolChainLabel">
<property name="text">
- <string>&amp;Tool chain:</string>
+ <string>&amp;Target:</string>
</property>
<property name="buddy">
<cstring>toolChainComboBox</cstring>
@@ -88,7 +88,7 @@
</widget>
</item>
<item row="4" column="1">
- <widget class="Debugger::Internal::DebuggerToolChainComboBox" name="toolChainComboBox"/>
+ <widget class="Debugger::ProfileChooser" name="toolChainComboBox"/>
</item>
<item row="5" column="0">
<widget class="QLabel" name="labelBreakAtMain">
@@ -173,7 +173,7 @@
</slots>
</customwidget>
<customwidget>
- <class>Debugger::Internal::DebuggerToolChainComboBox</class>
+ <class>Debugger::ProfileChooser</class>
<extends>QComboBox</extends>
<header>debuggertoolchaincombobox.h</header>
</customwidget>
diff --git a/src/plugins/debugger/startremotedialog.ui b/src/plugins/debugger/startremotedialog.ui
index bfa3faba10..ad695152d2 100644
--- a/src/plugins/debugger/startremotedialog.ui
+++ b/src/plugins/debugger/startremotedialog.ui
@@ -30,7 +30,7 @@
</widget>
</item>
<item row="0" column="1">
- <widget class="Debugger::Internal::DebuggerToolChainComboBox" name="toolchainComboBox"/>
+ <widget class="Debugger::ProfileChooser" name="toolchainComboBox"/>
</item>
<item row="1" column="0">
<widget class="QLabel" name="executableLabel">
@@ -210,7 +210,7 @@
</slots>
</customwidget>
<customwidget>
- <class>Debugger::Internal::DebuggerToolChainComboBox</class>
+ <class>Debugger::ProfileChooser</class>
<extends>QComboBox</extends>
<header>debuggertoolchaincombobox.h</header>
</customwidget>
diff --git a/src/plugins/qmlprojectmanager/qmlprojectruncontrol.cpp b/src/plugins/qmlprojectmanager/qmlprojectruncontrol.cpp
index bd0f1405db..afafc2d037 100644
--- a/src/plugins/qmlprojectmanager/qmlprojectruncontrol.cpp
+++ b/src/plugins/qmlprojectmanager/qmlprojectruncontrol.cpp
@@ -35,6 +35,7 @@
#include <coreplugin/icore.h>
#include <projectexplorer/projectexplorerconstants.h>
#include <projectexplorer/target.h>
+#include <projectexplorer/profile.h>
#include <projectexplorer/project.h>
#include <projectexplorer/projectexplorer.h>
#include <utils/qtcassert.h>
@@ -215,9 +216,6 @@ RunControl *QmlProjectRunControlFactory::createDebugRunControl(QmlProjectRunConf
if (runConfig->debuggerAspect()->useCppDebugger())
params.languages |= Debugger::CppLanguage;
- if (!runConfig->qtVersion()->qtAbis().isEmpty())
- params.toolChainAbi = runConfig->qtVersion()->qtAbis().first();
-
// Makes sure that all bindings go through the JavaScript engine, so that
// breakpoints are actually hit!
const QString optimizerKey = QLatin1String("QML_DISABLE_OPTIMIZER");
diff --git a/src/plugins/qt4projectmanager/qt-s60/s60devicedebugruncontrol.cpp b/src/plugins/qt4projectmanager/qt-s60/s60devicedebugruncontrol.cpp
index 041fa573b5..bfdfd2aa3c 100644
--- a/src/plugins/qt4projectmanager/qt-s60/s60devicedebugruncontrol.cpp
+++ b/src/plugins/qt4projectmanager/qt-s60/s60devicedebugruncontrol.cpp
@@ -39,8 +39,11 @@
#include <coreplugin/icore.h>
#include <debugger/debuggerengine.h>
+#include <debugger/debuggerprofileinformation.h>
#include <debugger/debuggerstartparameters.h>
#include <projectexplorer/buildconfiguration.h>
+#include <projectexplorer/profile.h>
+#include <projectexplorer/profileinformation.h>
#include <projectexplorer/project.h>
#include <projectexplorer/target.h>
#include <utils/qtcassert.h>
@@ -80,35 +83,41 @@ static Debugger::DebuggerStartParameters s60DebuggerStartParams(const S60DeviceR
qobject_cast<S60DeployConfiguration *>(rc->target()->activeDeployConfiguration());
QTC_ASSERT(activeDeployConf, return sp);
+ DebuggerRunConfigurationAspect *debuggerAspect = rc->debuggerAspect();
+
const QString debugFileName = QString::fromLatin1("%1:\\sys\\bin\\%2.exe")
.arg(activeDeployConf->installationDrive()).arg(rc->targetName());
+ Profile *profile = rc->target()->profile();
+ sp.sysRoot = SysRootProfileInformation::sysRoot(profile).toString();
+ sp.debuggerCommand = Debugger::DebuggerProfileInformation::debuggerCommand(profile).toString();
+ if (ToolChain *tc = ToolChainProfileInformation::toolChain(profile))
+ sp.toolChainAbi = tc->targetAbi();
SymbianIDevice::ConstPtr dev = activeDeployConf->device();
sp.remoteChannel = dev->serialPortName();
sp.processArgs = rc->commandLineArguments();
- if (rc->debuggerAspect()->useQmlDebugger() && !rc->debuggerAspect()->useCppDebugger()) {
+ if (debuggerAspect->useQmlDebugger() && !debuggerAspect->useCppDebugger()) {
sp.remoteSetupNeeded = true;
sp.startMode = Debugger::AttachToRemoteServer;
} else {
sp.startMode = Debugger::StartInternal;
}
- sp.toolChainAbi = rc->abi();
sp.executable = debugFileName;
sp.executableUid = rc->executableUid();
sp.serverAddress = dev->address();
sp.serverPort = dev->port().toInt();
sp.displayName = rc->displayName();
sp.qmlServerAddress = dev->address();
- sp.qmlServerPort = rc->debuggerAspect()->qmlDebugServerPort();
- if (rc->debuggerAspect()->useQmlDebugger()) {
+ sp.qmlServerPort = debuggerAspect->qmlDebugServerPort();
+ if (debuggerAspect->useQmlDebugger()) {
sp.languages |= Debugger::QmlLanguage;
QString qmlArgs = rc->qmlCommandLineArguments();
if (sp.processArgs.length())
sp.processArgs.prepend(QLatin1Char(' '));
sp.processArgs.prepend(qmlArgs);
}
- if (rc->debuggerAspect()->useCppDebugger())
+ if (debuggerAspect->useCppDebugger())
sp.languages |= Debugger::CppLanguage;
sp.communicationChannel = dev->communicationChannel() == SymbianIDevice::CommunicationCodaTcpConnection?
diff --git a/src/plugins/remotelinux/remotelinuxdebugsupport.cpp b/src/plugins/remotelinux/remotelinuxdebugsupport.cpp
index 86adfdf554..6184b94f22 100644
--- a/src/plugins/remotelinux/remotelinuxdebugsupport.cpp
+++ b/src/plugins/remotelinux/remotelinuxdebugsupport.cpp
@@ -97,9 +97,17 @@ using namespace Internal;
DebuggerStartParameters AbstractRemoteLinuxDebugSupport::startParameters(const RemoteLinuxRunConfiguration *runConfig)
{
DebuggerStartParameters params;
+ Target *target = runConfig->target();
+ Profile *profile = target->profile();
const LinuxDeviceConfiguration::ConstPtr devConf
- = DeviceProfileInformation::device(runConfig->target()->profile())
+ = DeviceProfileInformation::device(profile)
.dynamicCast<const RemoteLinux::LinuxDeviceConfiguration>();
+
+ params.sysRoot = SysRootProfileInformation::sysRoot(profile).toString();
+ params.debuggerCommand = DebuggerProfileInformation::debuggerCommand(profile).toString();
+ if (ToolChain *tc = ToolChainProfileInformation::toolChain(profile))
+ params.toolChainAbi = tc->targetAbi();
+
if (runConfig->debuggerAspect()->useQmlDebugger()) {
params.languages |= QmlLanguage;
params.qmlServerAddress = devConf->sshParameters().host;
@@ -108,18 +116,12 @@ DebuggerStartParameters AbstractRemoteLinuxDebugSupport::startParameters(const R
if (runConfig->debuggerAspect()->useCppDebugger()) {
params.languages |= CppLanguage;
params.processArgs = runConfig->arguments();
- QString systemRoot;
- if (SysRootProfileInformation::hasSysRoot(runConfig->target()->profile()))
- systemRoot = SysRootProfileInformation::sysRoot(runConfig->target()->profile()).toString();
- params.sysroot = systemRoot;
- params.toolChainAbi = runConfig->abi();
params.startMode = AttachToRemoteServer;
params.executable = runConfig->localExecutableFilePath();
- params.debuggerCommand = DebuggerProfileInformation::debuggerCommand(runConfig->target()->profile()).toString();
params.remoteChannel = devConf->sshParameters().host + QLatin1String(":-1");
// TODO: This functionality should be inside the debugger.
- ToolChain *tc = ToolChainProfileInformation::toolChain(runConfig->target()->profile());
+ ToolChain *tc = ToolChainProfileInformation::toolChain(profile);
if (tc) {
const Abi &abi = tc->targetAbi();
params.remoteArchitecture = abi.toString();
@@ -132,9 +134,9 @@ DebuggerStartParameters AbstractRemoteLinuxDebugSupport::startParameters(const R
params.remoteSetupNeeded = true;
params.displayName = runConfig->displayName();
- if (const Project *project = runConfig->target()->project()) {
+ if (const Project *project = target->project()) {
params.projectSourceDirectory = project->projectDirectory();
- if (const BuildConfiguration *buildConfig = runConfig->target()->activeBuildConfiguration())
+ if (const BuildConfiguration *buildConfig = target->activeBuildConfiguration())
params.projectBuildDirectory = buildConfig->buildDirectory();
params.projectSourceFiles = project->files(Project::ExcludeGeneratedFiles);
}
diff --git a/src/plugins/remotelinux/startgdbserverdialog.cpp b/src/plugins/remotelinux/startgdbserverdialog.cpp
index a487a4b9c7..41b1a307ea 100644
--- a/src/plugins/remotelinux/startgdbserverdialog.cpp
+++ b/src/plugins/remotelinux/startgdbserverdialog.cpp
@@ -37,6 +37,7 @@
#include "remotelinuxusedportsgatherer.h"
#include <coreplugin/icore.h>
+#include <debugger/debuggertoolchaincombobox.h>
#include <extensionsystem/pluginmanager.h>
#include <projectexplorer/devicesupport/devicemanager.h>
#include <projectexplorer/devicesupport/devicemanagermodel.h>
@@ -73,7 +74,7 @@ using namespace ProjectExplorer;
using namespace QSsh;
using namespace Utils;
-const char LastSysroot[] = "RemoteLinux/LastSysroot";
+const char LastProfile[] = "RemoteLinux/LastProfile";
const char LastDevice[] = "RemoteLinux/LastDevice";
const char LastProcessName[] = "RemoteLinux/LastProcessName";
//const char LastLocalExecutable[] = "RemoteLinux/LastLocalExecutable";
@@ -104,7 +105,7 @@ public:
QPushButton *attachProcessButton;
QTextBrowser *textBrowser;
QPushButton *closeButton;
- PathChooser *sysrootPathChooser;
+ Debugger::ProfileChooser *profileChooser;
RemoteLinuxUsedPortsGatherer gatherer;
SshRemoteProcessRunner runner;
@@ -120,10 +121,11 @@ StartGdbServerDialogPrivate::StartGdbServerDialogPrivate(StartGdbServerDialog *q
deviceComboBox = new QComboBox(q);
- sysrootPathChooser = new PathChooser(q);
- sysrootPathChooser->setExpectedKind(PathChooser::Directory);
- sysrootPathChooser->setPromptDialogTitle(StartGdbServerDialog::tr("Select Sysroot"));
- sysrootPathChooser->setPath(settings->value(LastSysroot).toString());
+ profileChooser = new Debugger::ProfileChooser(q);
+// sysrootPathChooser = new PathChooser(q);
+// sysrootPathChooser->setExpectedKind(PathChooser::Directory);
+// sysrootPathChooser->setPromptDialogTitle(StartGdbServerDialog::tr("Select Sysroot"));
+// sysrootPathChooser->setPath(settings->value(LastSysroot).toString());
//executablePathChooser = new PathChooser(q);
//executablePathChooser->setExpectedKind(PathChooser::File);
@@ -153,7 +155,7 @@ StartGdbServerDialogPrivate::StartGdbServerDialogPrivate(StartGdbServerDialog *q
QFormLayout *formLayout = new QFormLayout();
formLayout->addRow(StartGdbServerDialog::tr("Device:"), deviceComboBox);
- formLayout->addRow(StartGdbServerDialog::tr("Sysroot:"), sysrootPathChooser);
+ formLayout->addRow(StartGdbServerDialog::tr("Profile:"), profileChooser);
formLayout->addRow(StartGdbServerDialog::tr("&Filter entries:"), processFilterLineEdit);
QHBoxLayout *horizontalLayout2 = new QHBoxLayout();
@@ -197,7 +199,7 @@ StartGdbServerDialog::StartGdbServerDialog(QWidget *parent) :
connect(d->tableView->selectionModel(),
SIGNAL(selectionChanged(QItemSelection,QItemSelection)),
SLOT(updateButtons()));
- connect(d->sysrootPathChooser, SIGNAL(changed(QString)),
+ connect(d->profileChooser, SIGNAL(activated(int)),
SLOT(updateButtons()));
//connect(d->updateListButton, SIGNAL(clicked()),
// SLOT(updateProcessList()));
@@ -281,7 +283,7 @@ void StartGdbServerDialog::attachToProcess()
return;
}
- d->settings->setValue(LastSysroot, d->sysrootPathChooser->path());
+ d->settings->setValue(LastProfile, d->profileChooser->currentProfileId().toString());
d->settings->setValue(LastDevice, d->deviceComboBox->currentIndex());
d->settings->setValue(LastProcessName, d->processFilterLineEdit->text());
@@ -380,7 +382,7 @@ void StartGdbServerDialog::reportOpenPort(int port)
if (ob) {
QMetaObject::invokeMethod(ob, member, Qt::QueuedConnection,
Q_ARG(QString, channel),
- Q_ARG(QString, d->sysrootPathChooser->path()),
+ Q_ARG(QString, d->profileChooser->currentProfileId().toString()),
Q_ARG(QString, d->remoteCommandLine),
Q_ARG(QString, d->remoteExecutable));
}