forked from qt-creator/qt-creator
Merge remote-tracking branch 'origin/2.6'
Conflicts: qtcreator.pri qtcreator.qbp src/libs/utils/utils.pro Change-Id: I6f0aba746f915d8c51dcf9372f7d9f593562fc2b
This commit is contained in:
@@ -568,8 +568,10 @@ public:
|
||||
explicit AbiKitMatcher(const QList<Abi> &abis) : m_abis(abis) {}
|
||||
bool matches(const Kit *p) const
|
||||
{
|
||||
if (const ToolChain *tc = ToolChainKitInformation::toolChain(p))
|
||||
return m_abis.contains(tc->targetAbi());
|
||||
if (const ToolChain *tc = ToolChainKitInformation::toolChain(p)) {
|
||||
return m_abis.contains(tc->targetAbi())
|
||||
&& DebuggerKitInformation::isValidDebugger(p);
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
@@ -585,7 +587,7 @@ public:
|
||||
{
|
||||
if (const ToolChain *tc = ToolChainKitInformation::toolChain(p))
|
||||
foreach (const Abi &a, m_abis)
|
||||
if (a.isCompatibleWith(tc->targetAbi()))
|
||||
if (a.isCompatibleWith(tc->targetAbi()) && DebuggerKitInformation::isValidDebugger(p))
|
||||
return true;
|
||||
return false;
|
||||
}
|
||||
@@ -601,18 +603,14 @@ public:
|
||||
|
||||
bool matches(const Kit *k) const
|
||||
{
|
||||
const ToolChain *tc = ToolChainKitInformation::toolChain(k);
|
||||
QTC_ASSERT(tc, return false);
|
||||
const Abi abi = tc->targetAbi();
|
||||
if (abi.architecture() != Abi::X86Architecture
|
||||
|| abi.os() != Abi::WindowsOS
|
||||
|| abi.binaryFormat() != Abi::PEFormat)
|
||||
return false;
|
||||
if (abi.osFlavor() == Abi::WindowsMSysFlavor
|
||||
|| abi.osFlavor() == Abi::WindowsCEFlavor)
|
||||
return false;
|
||||
if (m_wordWidth && abi.wordWidth() != m_wordWidth)
|
||||
if (DebuggerKitInformation::engineType(k) != CdbEngineType
|
||||
|| !DebuggerKitInformation::isValidDebugger(k)) {
|
||||
return false;
|
||||
}
|
||||
if (m_wordWidth) {
|
||||
const ToolChain *tc = ToolChainKitInformation::toolChain(k);
|
||||
return tc && m_wordWidth == tc->targetAbi().wordWidth();
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
@@ -635,7 +633,7 @@ private:
|
||||
const char m_wordWidth;
|
||||
};
|
||||
|
||||
void fillParameters(DebuggerStartParameters *sp, const Kit *kit /* = 0 */)
|
||||
bool fillParameters(DebuggerStartParameters *sp, const Kit *kit /* = 0 */, QString *errorMessage /* = 0 */)
|
||||
{
|
||||
if (!kit) {
|
||||
// This code can only be reached when starting via the command line
|
||||
@@ -665,6 +663,27 @@ void fillParameters(DebuggerStartParameters *sp, const Kit *kit /* = 0 */)
|
||||
kit = KitManager::instance()->defaultKit();
|
||||
}
|
||||
|
||||
// Verify that debugger and profile are valid
|
||||
if (!kit) {
|
||||
sp->startMode = NoStartMode;
|
||||
if (errorMessage)
|
||||
*errorMessage = DebuggerKitInformation::tr("No kit found.");
|
||||
return false;
|
||||
}
|
||||
const QList<ProjectExplorer::Task> tasks = DebuggerKitInformation::validateDebugger(kit);
|
||||
if (!tasks.isEmpty()) {
|
||||
sp->startMode = NoStartMode;
|
||||
if (errorMessage) {
|
||||
foreach (const ProjectExplorer::Task &t, tasks) {
|
||||
if (errorMessage->isEmpty())
|
||||
errorMessage->append(QLatin1Char('\n'));
|
||||
errorMessage->append(t.description);
|
||||
}
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
sp->cppEngineType = DebuggerKitInformation::engineType(kit);
|
||||
sp->sysRoot = SysRootKitInformation::sysRoot(kit).toString();
|
||||
sp->debuggerCommand = DebuggerKitInformation::debuggerCommand(kit).toString();
|
||||
|
||||
@@ -677,6 +696,7 @@ void fillParameters(DebuggerStartParameters *sp, const Kit *kit /* = 0 */)
|
||||
sp->connParams = device->sshParameters();
|
||||
sp->remoteChannel = sp->connParams.host + QLatin1Char(':') + QString::number(sp->connParams.port);
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
static TextEditor::ITextEditor *currentTextEditor()
|
||||
@@ -1439,7 +1459,8 @@ bool DebuggerPluginPrivate::parseArgument(QStringList::const_iterator &it,
|
||||
}
|
||||
}
|
||||
}
|
||||
fillParameters(&sp, kit);
|
||||
if (fillParameters(&sp, kit, errorMessage))
|
||||
return false;
|
||||
if (sp.startMode == StartExternal) {
|
||||
sp.displayName = tr("Executable file \"%1\"").arg(sp.executable);
|
||||
sp.startMessage = tr("Debugging file %1.").arg(sp.executable);
|
||||
@@ -1459,7 +1480,8 @@ bool DebuggerPluginPrivate::parseArgument(QStringList::const_iterator &it,
|
||||
return false;
|
||||
}
|
||||
DebuggerStartParameters sp;
|
||||
fillParameters(&sp, CdbMatcher::findUniversalCdbKit());
|
||||
if (!fillParameters(&sp, CdbMatcher::findUniversalCdbKit(), errorMessage))
|
||||
return false;
|
||||
sp.startMode = AttachCrashedExternal;
|
||||
sp.crashParameter = it->section(QLatin1Char(':'), 0, 0);
|
||||
sp.attachPID = it->section(QLatin1Char(':'), 1, 1).toULongLong();
|
||||
@@ -1597,7 +1619,7 @@ void DebuggerPluginPrivate::attachCore()
|
||||
|
||||
DebuggerStartParameters sp;
|
||||
QString display = dlg.isLocal() ? dlg.localCoreFile() : dlg.remoteCoreFile();
|
||||
fillParameters(&sp, dlg.kit());
|
||||
QTC_ASSERT(fillParameters(&sp, dlg.kit()), return);
|
||||
sp.masterEngineType = GdbEngineType;
|
||||
sp.executable = dlg.localExecutableFile();
|
||||
sp.coreFile = dlg.localCoreFile();
|
||||
@@ -1613,8 +1635,7 @@ void DebuggerPluginPrivate::startRemoteCdbSession()
|
||||
const QString connectionKey = _("CdbRemoteConnection");
|
||||
DebuggerStartParameters sp;
|
||||
Kit *kit = CdbMatcher::findUniversalCdbKit();
|
||||
QTC_ASSERT(kit, return);
|
||||
fillParameters(&sp, kit);
|
||||
QTC_ASSERT(kit && fillParameters(&sp, kit), return);
|
||||
sp.startMode = AttachToRemoteServer;
|
||||
sp.closeMode = KillAtClose;
|
||||
StartRemoteCdbDialog dlg(mainWindow());
|
||||
@@ -1652,7 +1673,10 @@ void DebuggerPluginPrivate::attachToRunningApplication()
|
||||
|
||||
void DebuggerPluginPrivate::attachToProcess(bool startServerOnly)
|
||||
{
|
||||
DeviceProcessesDialog *dlg = new DeviceProcessesDialog(mainWindow());
|
||||
const DebuggerKitChooser::Mode mode = startServerOnly ?
|
||||
DebuggerKitChooser::RemoteDebugging : DebuggerKitChooser::LocalDebugging;
|
||||
DebuggerKitChooser *kitChooser = new DebuggerKitChooser(mode);
|
||||
DeviceProcessesDialog *dlg = new DeviceProcessesDialog(kitChooser, mainWindow());
|
||||
dlg->addAcceptButton(DeviceProcessesDialog::tr("&Attach to Process"));
|
||||
dlg->showAllDevices();
|
||||
if (dlg->exec() == QDialog::Rejected) {
|
||||
@@ -1661,7 +1685,6 @@ void DebuggerPluginPrivate::attachToProcess(bool startServerOnly)
|
||||
}
|
||||
|
||||
dlg->setAttribute(Qt::WA_DeleteOnClose);
|
||||
KitChooser *kitChooser = dlg->kitChooser();
|
||||
Kit *kit = kitChooser->currentKit();
|
||||
QTC_ASSERT(kit, return);
|
||||
IDevice::ConstPtr device = DeviceKitInformation::device(kit);
|
||||
@@ -1684,7 +1707,7 @@ void DebuggerPluginPrivate::attachToProcess(bool startServerOnly)
|
||||
|
||||
if (device->type() == ProjectExplorer::Constants::DESKTOP_DEVICE_TYPE) {
|
||||
DebuggerStartParameters sp;
|
||||
fillParameters(&sp, kit);
|
||||
QTC_ASSERT(fillParameters(&sp, kit), return);
|
||||
sp.attachPID = process.pid;
|
||||
sp.displayName = tr("Process %1").arg(process.pid);
|
||||
sp.executable = process.exe;
|
||||
@@ -1709,7 +1732,7 @@ void DebuggerPluginPrivate::attachExternalApplication(ProjectExplorer::RunContro
|
||||
if (const RunConfiguration *runConfiguration = rc->runConfiguration())
|
||||
if (const Target *target = runConfiguration->target())
|
||||
kit = target->kit();
|
||||
fillParameters(&sp, kit);
|
||||
QTC_ASSERT(fillParameters(&sp, kit), return);
|
||||
DebuggerRunControlFactory::createAndScheduleRun(sp);
|
||||
}
|
||||
|
||||
@@ -1732,11 +1755,10 @@ void DebuggerPluginPrivate::attachToQmlPort()
|
||||
return;
|
||||
|
||||
Kit *kit = dlg.kit();
|
||||
QTC_ASSERT(kit, return);
|
||||
QTC_ASSERT(kit && fillParameters(&sp, kit), return);
|
||||
setConfigValue(_("LastQmlServerPort"), dlg.port());
|
||||
setConfigValue(_("LastProfile"), kit->id().toString());
|
||||
|
||||
fillParameters(&sp, kit);
|
||||
sp.qmlServerAddress = sp.connParams.host;
|
||||
sp.qmlServerPort = dlg.port();
|
||||
sp.startMode = AttachToRemoteProcess;
|
||||
@@ -3388,9 +3410,9 @@ void DebuggerPlugin::remoteCommand(const QStringList &options,
|
||||
}
|
||||
|
||||
DebuggerRunControl *DebuggerPlugin::createDebugger
|
||||
(const DebuggerStartParameters &sp, RunConfiguration *rc)
|
||||
(const DebuggerStartParameters &sp, RunConfiguration *rc, QString *errorMessage)
|
||||
{
|
||||
return DebuggerRunControlFactory::doCreate(sp, rc);
|
||||
return DebuggerRunControlFactory::doCreate(sp, rc, errorMessage);
|
||||
}
|
||||
|
||||
void DebuggerPlugin::extensionsInitialized()
|
||||
|
||||
Reference in New Issue
Block a user