forked from qt-creator/qt-creator
Debugger: Display parsed gdb version in build&run debugger list
Change-Id: Ie7ec35f2f282f7f5ed527253c64c19e2b9347b18 Reviewed-by: hjk <hjk121@nokiamail.com>
This commit is contained in:
@@ -31,6 +31,7 @@
|
||||
#include "debuggerkitinformation.h"
|
||||
#include "debuggerkitconfigwidget.h"
|
||||
#include "debuggeroptionspage.h"
|
||||
#include "debuggerprotocol.h"
|
||||
|
||||
#include <projectexplorer/abi.h>
|
||||
#include <utils/fileutils.h>
|
||||
@@ -50,6 +51,7 @@ static const char DEBUGGER_INFORMATION_ID[] = "Id";
|
||||
static const char DEBUGGER_INFORMATION_ENGINETYPE[] = "EngineType";
|
||||
static const char DEBUGGER_INFORMATION_AUTODETECTED[] = "AutoDetected";
|
||||
static const char DEBUGGER_INFORMATION_AUTODETECTION_SOURCE[] = "AutoDetectionSource";
|
||||
static const char DEBUGGER_INFORMATION_VERSION[] = "Version";
|
||||
static const char DEBUGGER_INFORMATION_ABIS[] = "Abis";
|
||||
|
||||
namespace Debugger {
|
||||
@@ -78,6 +80,7 @@ DebuggerItem::DebuggerItem(const QVariantMap &data)
|
||||
m_displayName = data.value(QLatin1String(DEBUGGER_INFORMATION_DISPLAYNAME)).toString();
|
||||
m_isAutoDetected = data.value(QLatin1String(DEBUGGER_INFORMATION_AUTODETECTED), false).toBool();
|
||||
m_autoDetectionSource = data.value(QLatin1String(DEBUGGER_INFORMATION_AUTODETECTION_SOURCE)).toString();
|
||||
m_version = data.value(QLatin1String(DEBUGGER_INFORMATION_VERSION)).toString();
|
||||
m_engineType = DebuggerEngineType(data.value(QLatin1String(DEBUGGER_INFORMATION_ENGINETYPE),
|
||||
static_cast<int>(NoEngineType)).toInt());
|
||||
|
||||
@@ -122,6 +125,16 @@ void DebuggerItem::reinitializeFromFile()
|
||||
// Fallback.
|
||||
m_abis = Abi::abisOfBinary(m_command); // FIXME: Wrong.
|
||||
}
|
||||
|
||||
// Version
|
||||
QString all = QString::fromUtf8(ba);
|
||||
bool isMacGdb, isQnxGdb;
|
||||
int version = 0, buildVersion = 0;
|
||||
Debugger::Internal::extractGdbVersion(all,
|
||||
&version, &buildVersion, &isMacGdb, &isQnxGdb);
|
||||
if (version)
|
||||
m_version = QString::fromLatin1("%1.%2.%3")
|
||||
.arg(version / 10000).arg((version / 100) % 100).arg(version % 100);
|
||||
return;
|
||||
}
|
||||
if (ba.contains("lldb") || ba.startsWith("LLDB")) {
|
||||
@@ -190,6 +203,7 @@ QVariantMap DebuggerItem::toMap() const
|
||||
data.insert(QLatin1String(DEBUGGER_INFORMATION_ENGINETYPE), int(m_engineType));
|
||||
data.insert(QLatin1String(DEBUGGER_INFORMATION_AUTODETECTED), m_isAutoDetected);
|
||||
data.insert(QLatin1String(DEBUGGER_INFORMATION_AUTODETECTION_SOURCE), m_autoDetectionSource);
|
||||
data.insert(QLatin1String(DEBUGGER_INFORMATION_VERSION), m_version);
|
||||
data.insert(QLatin1String(DEBUGGER_INFORMATION_ABIS), abiNames());
|
||||
return data;
|
||||
}
|
||||
@@ -214,6 +228,16 @@ void DebuggerItem::setAutoDetected(bool isAutoDetected)
|
||||
m_isAutoDetected = isAutoDetected;
|
||||
}
|
||||
|
||||
QString DebuggerItem::version() const
|
||||
{
|
||||
return m_version;
|
||||
}
|
||||
|
||||
void DebuggerItem::setVersion(const QString &version)
|
||||
{
|
||||
m_version = version;
|
||||
}
|
||||
|
||||
void DebuggerItem::setAutoDetectionSource(const QString &autoDetectionSource)
|
||||
{
|
||||
m_autoDetectionSource = autoDetectionSource;
|
||||
|
||||
@@ -81,6 +81,9 @@ public:
|
||||
bool isAutoDetected() const { return m_isAutoDetected; }
|
||||
void setAutoDetected(bool isAutoDetected);
|
||||
|
||||
QString version() const;
|
||||
void setVersion(const QString &version);
|
||||
|
||||
QString autoDetectionSource() const { return m_autoDetectionSource; }
|
||||
void setAutoDetectionSource(const QString &autoDetectionSource);
|
||||
|
||||
@@ -105,6 +108,7 @@ private:
|
||||
Utils::FileName m_command;
|
||||
bool m_isAutoDetected;
|
||||
QString m_autoDetectionSource;
|
||||
QString m_version;
|
||||
QList<ProjectExplorer::Abi> m_abis;
|
||||
|
||||
friend class Internal::DebuggerItemConfigWidget;
|
||||
|
||||
@@ -77,6 +77,10 @@ DebuggerItemConfigWidget::DebuggerItemConfigWidget(DebuggerItemModel *model) :
|
||||
m_cdbLabel->setTextInteractionFlags(Qt::TextBrowserInteraction);
|
||||
m_cdbLabel->setOpenExternalLinks(true);
|
||||
|
||||
m_versionLabel = new QLineEdit(this);
|
||||
m_versionLabel->setPlaceholderText(tr("Unknown"));
|
||||
m_versionLabel->setEnabled(false);
|
||||
|
||||
m_abis = new QLineEdit(this);
|
||||
m_abis->setEnabled(false);
|
||||
|
||||
@@ -87,6 +91,7 @@ DebuggerItemConfigWidget::DebuggerItemConfigWidget(DebuggerItemModel *model) :
|
||||
formLayout->addRow(m_cdbLabel);
|
||||
formLayout->addRow(new QLabel(tr("Path:")), m_binaryChooser);
|
||||
formLayout->addRow(new QLabel(tr("ABIs:")), m_abis);
|
||||
formLayout->addRow(new QLabel(tr("Version:")), m_versionLabel);
|
||||
|
||||
connect(m_binaryChooser, SIGNAL(changed(QString)), this, SLOT(binaryPathHasChanged()));
|
||||
}
|
||||
@@ -102,12 +107,12 @@ DebuggerItem DebuggerItemConfigWidget::item() const
|
||||
item.setAutoDetected(m_autodetected);
|
||||
QList<ProjectExplorer::Abi> abiList;
|
||||
foreach (const QString &a, m_abis->text().split(QRegExp(QLatin1String("[^A-Za-z0-9-_]+")))) {
|
||||
ProjectExplorer::Abi abi(a);
|
||||
if (a.isNull())
|
||||
continue;
|
||||
abiList << a;
|
||||
}
|
||||
item.setAbis(abiList);
|
||||
item.setVersion(m_versionLabel->text());
|
||||
item.setEngineType(m_engineType);
|
||||
return item;
|
||||
}
|
||||
@@ -132,6 +137,7 @@ void DebuggerItemConfigWidget::handleCommandChange()
|
||||
= DebuggerItemManager::findByCommand(m_binaryChooser->fileName());
|
||||
if (existing) {
|
||||
setAbis(existing->abiNames());
|
||||
m_versionLabel->setText(existing->version());
|
||||
m_engineType = existing->engineType();
|
||||
} else {
|
||||
QFileInfo fi = QFileInfo(m_binaryChooser->path());
|
||||
@@ -139,9 +145,11 @@ void DebuggerItemConfigWidget::handleCommandChange()
|
||||
DebuggerItem tmp = item();
|
||||
tmp.reinitializeFromFile();
|
||||
setAbis(tmp.abiNames());
|
||||
m_versionLabel->setText(tmp.version());
|
||||
m_engineType = tmp.engineType();
|
||||
} else {
|
||||
setAbis(QStringList());
|
||||
m_versionLabel->setText(QString());
|
||||
m_engineType = NoEngineType;
|
||||
}
|
||||
}
|
||||
@@ -181,7 +189,7 @@ void DebuggerItemConfigWidget::setItem(const DebuggerItem &item)
|
||||
m_cdbLabel->setText(text);
|
||||
m_cdbLabel->setVisible(!text.isEmpty());
|
||||
m_binaryChooser->setCommandVersionArguments(QStringList(versionCommand));
|
||||
|
||||
m_versionLabel->setText(item.version());
|
||||
setAbis(item.abiNames());
|
||||
m_engineType = item.engineType();
|
||||
m_id = item.id();
|
||||
|
||||
@@ -82,6 +82,7 @@ private:
|
||||
|
||||
QLineEdit *m_displayNameLineEdit;
|
||||
QLabel *m_cdbLabel;
|
||||
QLineEdit *m_versionLabel;
|
||||
Utils::PathChooser *m_binaryChooser;
|
||||
QLineEdit *m_abis;
|
||||
DebuggerItemModel *m_model;
|
||||
|
||||
Reference in New Issue
Block a user