summaryrefslogtreecommitdiff
path: root/src/plugins/debugger
diff options
context:
space:
mode:
Diffstat (limited to 'src/plugins/debugger')
-rw-r--r--src/plugins/debugger/cdb/cdbengine.cpp21
-rw-r--r--src/plugins/debugger/cdb/cdbengine.h4
-rw-r--r--src/plugins/debugger/commonoptionspage.cpp2
-rw-r--r--src/plugins/debugger/debugger.pro1
-rw-r--r--src/plugins/debugger/debugger.qbs20
-rw-r--r--src/plugins/debugger/debuggerconstants.h2
-rw-r--r--src/plugins/debugger/debuggeritem.h4
-rw-r--r--src/plugins/debugger/debuggeritemmanager.cpp16
-rw-r--r--src/plugins/debugger/debuggeritemmodel.cpp12
-rw-r--r--src/plugins/debugger/debuggerkitconfigwidget.cpp2
-rw-r--r--src/plugins/debugger/debuggeroptionspage.cpp82
-rw-r--r--src/plugins/debugger/debuggeroptionspage.h43
-rw-r--r--src/plugins/debugger/debuggerplugin.cpp8
-rw-r--r--src/plugins/debugger/debuggerprotocol.cpp97
-rw-r--r--src/plugins/debugger/debuggerprotocol.h2
-rw-r--r--src/plugins/debugger/debuggerrunner.cpp5
-rw-r--r--src/plugins/debugger/disassembleragent.cpp10
-rw-r--r--src/plugins/debugger/gdb/gdboptionspage.cpp12
-rw-r--r--src/plugins/debugger/lldblib/guest/README31
-rw-r--r--src/plugins/debugger/lldblib/guest/lldbengineguest.cpp761
-rw-r--r--src/plugins/debugger/lldblib/guest/lldbengineguest.h136
-rw-r--r--src/plugins/debugger/lldblib/guest/main.cpp151
-rw-r--r--src/plugins/debugger/lldblib/guest/qtcreator-lldb.plist21
-rw-r--r--src/plugins/debugger/lldblib/guest/qtcreator-lldb.pri2
-rw-r--r--src/plugins/debugger/lldblib/guest/qtcreator-lldb.pro61
-rw-r--r--src/plugins/debugger/lldblib/ipcengineguest.cpp637
-rw-r--r--src/plugins/debugger/lldblib/ipcengineguest.h191
-rw-r--r--src/plugins/debugger/lldblib/ipcenginehost.cpp661
-rw-r--r--src/plugins/debugger/lldblib/ipcenginehost.h140
-rw-r--r--src/plugins/debugger/lldblib/lldbenginehost.cpp232
-rw-r--r--src/plugins/debugger/lldblib/lldbenginehost.h88
-rw-r--r--src/plugins/debugger/lldblib/lldbhost.pri20
-rw-r--r--src/plugins/debugger/lldblib/lldboptionspage.cpp109
-rw-r--r--src/plugins/debugger/lldblib/lldboptionspage.h80
-rw-r--r--src/plugins/debugger/lldblib/lldboptionspagewidget.ui59
-rw-r--r--src/plugins/debugger/localsandexpressionsoptionspage.ui4
-rw-r--r--src/plugins/debugger/sourceagent.cpp4
-rw-r--r--src/plugins/debugger/watchhandler.cpp6
38 files changed, 251 insertions, 3486 deletions
diff --git a/src/plugins/debugger/cdb/cdbengine.cpp b/src/plugins/debugger/cdb/cdbengine.cpp
index e57b0b189e..ec8e6b764a 100644
--- a/src/plugins/debugger/cdb/cdbengine.cpp
+++ b/src/plugins/debugger/cdb/cdbengine.cpp
@@ -339,7 +339,6 @@ void addCdbOptionPages(QList<Core::IOptionsPage *> *opts)
CdbEngine::CdbEngine(const DebuggerStartParameters &sp) :
DebuggerEngine(sp),
- m_creatorExtPrefix("<qtcreatorcdbext>|"),
m_tokenPrefix("<token>"),
m_effectiveStartMode(NoStartMode),
m_accessible(false),
@@ -365,6 +364,8 @@ CdbEngine::CdbEngine(const DebuggerStartParameters &sp) :
this, SLOT(operateByInstructionTriggered(bool)));
connect(debuggerCore()->action(VerboseLog), SIGNAL(triggered(bool)),
this, SLOT(verboseLogTriggered(bool)));
+ connect(debuggerCore()->action(CreateFullBacktrace), SIGNAL(triggered()),
+ this, SLOT(createFullBacktrace()));
setObjectName(QLatin1String("CdbEngine"));
connect(&m_process, SIGNAL(finished(int)), this, SLOT(processFinished()));
connect(&m_process, SIGNAL(error(QProcess::ProcessError)), this, SLOT(processError()));
@@ -597,6 +598,16 @@ void CdbEngine::consoleStubExited()
{
}
+void CdbEngine::createFullBacktrace()
+{
+ postBuiltinCommand("~*kp", 0, &CdbEngine::handleCreateFullBackTrace);
+}
+
+void CdbEngine::handleCreateFullBackTrace(const CdbEngine::CdbBuiltinCommandPtr &cmd)
+{
+ debuggerCore()->openTextEditor(QLatin1String("Backtrace $"), QLatin1String(cmd->joinedReply()));
+}
+
void CdbEngine::setupEngine()
{
if (debug)
@@ -1101,6 +1112,7 @@ bool CdbEngine::hasCapability(unsigned cap) const
|BreakOnThrowAndCatchCapability // Sort-of: Can break on throw().
|BreakConditionCapability|TracePointCapability
|BreakModuleCapability
+ |CreateFullBacktraceCapability
|OperateByInstructionCapability
|RunToLineCapability
|MemoryAddressCapability);
@@ -2541,11 +2553,12 @@ void CdbEngine::parseOutputLine(QByteArray line)
while (isCdbPrompt(line))
line.remove(0, CdbPromptLength);
// An extension notification (potentially consisting of several chunks)
- if (line.startsWith(m_creatorExtPrefix)) {
+ static const QByteArray creatorExtPrefix = "<qtcreatorcdbext>|";
+ if (line.startsWith(creatorExtPrefix)) {
// "<qtcreatorcdbext>|type_char|token|remainingChunks|serviceName|message"
- const char type = line.at(m_creatorExtPrefix.size());
+ const char type = line.at(creatorExtPrefix.size());
// integer token
- const int tokenPos = m_creatorExtPrefix.size() + 2;
+ const int tokenPos = creatorExtPrefix.size() + 2;
const int tokenEndPos = line.indexOf('|', tokenPos);
QTC_ASSERT(tokenEndPos != -1, return);
const int token = line.mid(tokenPos, tokenEndPos - tokenPos).toInt();
diff --git a/src/plugins/debugger/cdb/cdbengine.h b/src/plugins/debugger/cdb/cdbengine.h
index 4d8e9d1214..d86c6c50fb 100644
--- a/src/plugins/debugger/cdb/cdbengine.h
+++ b/src/plugins/debugger/cdb/cdbengine.h
@@ -156,6 +156,8 @@ private slots:
void consoleStubProcessStarted();
void consoleStubExited();
+ void createFullBacktrace();
+
void handleDoInterruptInferior(const QString &errorMessage);
private:
@@ -227,6 +229,7 @@ private:
void ensureUsing32BitStackInWow64(const CdbBuiltinCommandPtr &cmd);
void handleSwitchWow64Stack(const CdbBuiltinCommandPtr &cmd);
void jumpToAddress(quint64 address);
+ void handleCreateFullBackTrace(const CdbBuiltinCommandPtr &cmd);
// Extension commands
void handleThreads(const CdbExtensionCommandPtr &);
@@ -248,7 +251,6 @@ private:
unsigned parseStackTrace(const GdbMi &data, bool sourceStepInto);
void mergeStartParametersSourcePathMap();
- const QByteArray m_creatorExtPrefix;
const QByteArray m_tokenPrefix;
QProcess m_process;
diff --git a/src/plugins/debugger/commonoptionspage.cpp b/src/plugins/debugger/commonoptionspage.cpp
index b75581e001..3aede9b0e5 100644
--- a/src/plugins/debugger/commonoptionspage.cpp
+++ b/src/plugins/debugger/commonoptionspage.cpp
@@ -301,7 +301,7 @@ QString CommonOptionsPage::msgSetBreakpointAtFunctionToolTip(const char *functio
const QString &hint)
{
QString result = QLatin1String("<html><head/><body>");
- result += tr("Always add a breakpoint on the <i>%1()</i> function.").arg(QLatin1String(function));
+ result += tr("Always adds a breakpoint on the <i>%1()</i> function.").arg(QLatin1String(function));
if (!hint.isEmpty()) {
result += QLatin1String("<br>");
result += hint;
diff --git a/src/plugins/debugger/debugger.pro b/src/plugins/debugger/debugger.pro
index 7798cf0bfe..c9f794d55d 100644
--- a/src/plugins/debugger/debugger.pro
+++ b/src/plugins/debugger/debugger.pro
@@ -151,7 +151,6 @@ include(cdb/cdb.pri)
include(gdb/gdb.pri)
include(pdb/pdb.pri)
include(lldb/lldb.pri)
-include(lldblib/lldbhost.pri)
include(qml/qml.pri)
include(namedemangler/namedemangler.pri)
diff --git a/src/plugins/debugger/debugger.qbs b/src/plugins/debugger/debugger.qbs
index 709dc128c3..44a36b7588 100644
--- a/src/plugins/debugger/debugger.qbs
+++ b/src/plugins/debugger/debugger.qbs
@@ -132,16 +132,6 @@ QtcPlugin {
}
Group {
- name: "lldblib"
- id: lldblib
- prefix: "lldblib/"
- files: [
- "ipcenginehost.cpp", "ipcenginehost.h",
- "lldbenginehost.cpp", "lldbenginehost.h"
- ]
- }
-
- Group {
name: "pdb"
prefix: "pdb/"
files: ["pdbengine.cpp", "pdbengine.h"]
@@ -247,16 +237,6 @@ QtcPlugin {
]
}
- Group {
- name: "LLDBOptions"
- condition: qbs.targetOS.contains("osx")
- files: [
- "lldblib/lldboptionspage.cpp",
- "lldblib/lldboptionspage.h",
- "lldblib/lldboptionspagewidget.ui",
- ]
- }
-
Properties {
condition: qbs.targetOS.contains("windows")
cpp.dynamicLibraries: [
diff --git a/src/plugins/debugger/debuggerconstants.h b/src/plugins/debugger/debuggerconstants.h
index 19bc0fe994..4e5a6e4c4f 100644
--- a/src/plugins/debugger/debuggerconstants.h
+++ b/src/plugins/debugger/debuggerconstants.h
@@ -190,14 +190,12 @@ enum DebuggerEngineType
PdbEngineType = 0x008,
QmlEngineType = 0x020,
QmlCppEngineType = 0x040,
- LldbLibEngineType = 0x080,
LldbEngineType = 0x100,
AllEngineTypes = GdbEngineType
| CdbEngineType
| PdbEngineType
| QmlEngineType
| QmlCppEngineType
- | LldbLibEngineType
| LldbEngineType
};
diff --git a/src/plugins/debugger/debuggeritem.h b/src/plugins/debugger/debuggeritem.h
index 5802b23f81..c7d9d70777 100644
--- a/src/plugins/debugger/debuggeritem.h
+++ b/src/plugins/debugger/debuggeritem.h
@@ -42,6 +42,7 @@
namespace Debugger {
+class DebuggerItemManager;
namespace Internal {
class DebuggerItemConfigWidget;
class DebuggerItemModel;
@@ -63,7 +64,6 @@ public:
QString engineTypeName() const;
QVariantMap toMap() const;
- void reinitializeFromFile();
QVariant id() const { return m_id; }
@@ -92,6 +92,7 @@ public:
private:
DebuggerItem(const QVariant &id);
+ void reinitializeFromFile();
QVariant m_id;
QString m_displayName;
@@ -102,6 +103,7 @@ private:
friend class Internal::DebuggerItemConfigWidget;
friend class Internal::DebuggerItemModel;
+ friend class DebuggerItemManager;
};
} // namespace Debugger
diff --git a/src/plugins/debugger/debuggeritemmanager.cpp b/src/plugins/debugger/debuggeritemmanager.cpp
index cef2fd529a..552018bd98 100644
--- a/src/plugins/debugger/debuggeritemmanager.cpp
+++ b/src/plugins/debugger/debuggeritemmanager.cpp
@@ -433,10 +433,18 @@ void DebuggerItemManager::setItemData(const QVariant &id, const QString &display
for (int i = 0, n = m_debuggers.size(); i != n; ++i) {
DebuggerItem &item = m_debuggers[i];
if (item.id() == id) {
- item.setDisplayName(displayName);
- item.setCommand(fileName);
- item.reinitializeFromFile();
- emit m_instance->debuggerUpdated(id);
+ bool changed = false;
+ if (item.displayName() != displayName) {
+ item.setDisplayName(displayName);
+ changed = true;
+ }
+ if (item.command() != fileName) {
+ item.setCommand(fileName);
+ item.reinitializeFromFile();
+ changed = true;
+ }
+ if (changed)
+ emit m_instance->debuggerUpdated(id);
break;
}
}
diff --git a/src/plugins/debugger/debuggeritemmodel.cpp b/src/plugins/debugger/debuggeritemmodel.cpp
index f2c2382040..913ebe5e1c 100644
--- a/src/plugins/debugger/debuggeritemmodel.cpp
+++ b/src/plugins/debugger/debuggeritemmodel.cpp
@@ -37,6 +37,8 @@
namespace Debugger {
namespace Internal {
+const int AbiRole = Qt::UserRole + 2;
+
static QList<QStandardItem *> describeItem(const DebuggerItem &item)
{
QList<QStandardItem *> row;
@@ -44,7 +46,7 @@ static QList<QStandardItem *> describeItem(const DebuggerItem &item)
row.append(new QStandardItem(item.command().toUserOutput()));
row.append(new QStandardItem(item.engineTypeName()));
row.at(0)->setData(item.id());
- row.at(0)->setData(item.abiNames(), Qt::UserRole + 2);
+ row.at(0)->setData(item.abiNames(), AbiRole);
row.at(0)->setEditable(false);
row.at(1)->setEditable(false);
row.at(1)->setData(item.toMap());
@@ -150,15 +152,15 @@ bool DebuggerItemModel::updateDebuggerStandardItem(const DebuggerItem &item, boo
QTC_ASSERT(parent, return false);
// Do not mark items as changed if they actually are not:
- DebuggerItem orig = debuggerItem(sitem);
- if (orig == item && DebuggerItemManager::findById(orig.id()))
+ const DebuggerItem *orig = DebuggerItemManager::findById(item.id());
+ if (orig && *orig == item)
changed = false;
int row = sitem->row();
QFont font = sitem->font();
font.setBold(changed);
parent->child(row, 0)->setData(item.displayName(), Qt::DisplayRole);
- parent->child(row, 0)->setData(item.abiNames(), Qt::UserRole + 2);
+ parent->child(row, 0)->setData(item.abiNames(), AbiRole);
parent->child(row, 0)->setFont(font);
parent->child(row, 1)->setData(item.command().toUserOutput(), Qt::DisplayRole);
parent->child(row, 1)->setFont(font);
@@ -178,7 +180,7 @@ DebuggerItem DebuggerItemModel::debuggerItem(QStandardItem *sitem) const
item.m_id = i->data();
item.setDisplayName(i->data(Qt::DisplayRole).toString());
- QStringList abis = i->data(Qt::UserRole + 2).toStringList();
+ QStringList abis = i->data(AbiRole).toStringList();
QList<ProjectExplorer::Abi> abiList;
foreach (const QString &abi, abis)
abiList << ProjectExplorer::Abi(abi);
diff --git a/src/plugins/debugger/debuggerkitconfigwidget.cpp b/src/plugins/debugger/debuggerkitconfigwidget.cpp
index 504b260c0f..883d222150 100644
--- a/src/plugins/debugger/debuggerkitconfigwidget.cpp
+++ b/src/plugins/debugger/debuggerkitconfigwidget.cpp
@@ -174,7 +174,7 @@ void DebuggerKitConfigWidget::onDebuggerRemoved(const QVariant &id)
{
if (const int pos = indexOf(id)) {
m_comboBox->removeItem(pos);
- updateComboBox(id);
+ refresh();
}
}
diff --git a/src/plugins/debugger/debuggeroptionspage.cpp b/src/plugins/debugger/debuggeroptionspage.cpp
index da42957d65..bd0b8d2916 100644
--- a/src/plugins/debugger/debuggeroptionspage.cpp
+++ b/src/plugins/debugger/debuggeroptionspage.cpp
@@ -39,6 +39,7 @@
#include <utils/qtcassert.h>
#include <utils/winutils.h>
+#include <QFileInfo>
#include <QFormLayout>
#include <QHeaderView>
#include <QLabel>
@@ -59,26 +60,6 @@ static const char debuggingToolsWikiLinkC[] = "http://qt-project.org/wiki/Qt_Cre
// DebuggerItemConfigWidget
// -----------------------------------------------------------------------
-class DebuggerItemConfigWidget : public QWidget
-{
- Q_DECLARE_TR_FUNCTIONS(Debugger::Internal::DebuggerItemConfigWidget)
-
-public:
- explicit DebuggerItemConfigWidget(DebuggerItemModel *model);
- DebuggerItem store() const;
- void setItem(const DebuggerItem &item);
- void apply();
-
-private:
- QLineEdit *m_displayNameLineEdit;
- QLabel *m_cdbLabel;
- PathChooser *m_binaryChooser;
- QLineEdit *m_abis;
- DebuggerItemModel *m_model;
- bool m_autodetected;
- QVariant m_id;
-};
-
DebuggerItemConfigWidget::DebuggerItemConfigWidget(DebuggerItemModel *model) :
m_model(model)
{
@@ -90,6 +71,7 @@ DebuggerItemConfigWidget::DebuggerItemConfigWidget(DebuggerItemModel *model) :
m_binaryChooser->setExpectedKind(PathChooser::ExistingCommand);
m_binaryChooser->setMinimumWidth(400);
m_binaryChooser->setHistoryCompleter(QLatin1String("DebuggerPaths"));
+ connect(m_binaryChooser, SIGNAL(changed(QString)), this, SLOT(commandWasChanged()));
m_cdbLabel = new QLabel(this);
m_cdbLabel->setTextInteractionFlags(Qt::TextBrowserInteraction);
@@ -107,7 +89,7 @@ DebuggerItemConfigWidget::DebuggerItemConfigWidget(DebuggerItemModel *model) :
formLayout->addRow(new QLabel(tr("ABIs:")), m_abis);
}
-DebuggerItem DebuggerItemConfigWidget::store() const
+DebuggerItem DebuggerItemConfigWidget::item() const
{
DebuggerItem item(m_id);
if (m_id.isNull())
@@ -116,11 +98,31 @@ DebuggerItem DebuggerItemConfigWidget::store() const
item.setDisplayName(m_displayNameLineEdit->text());
item.setCommand(m_binaryChooser->fileName());
item.setAutoDetected(m_autodetected);
- item.reinitializeFromFile();
- m_model->updateDebugger(item);
+ 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.setEngineType(m_engineType);
return item;
}
+
+void DebuggerItemConfigWidget::store() const
+{
+ DebuggerItem i = item();
+ if (i.isValid())
+ m_model->updateDebugger(i);
+}
+
+void DebuggerItemConfigWidget::setAbis(const QStringList &abiNames)
+{
+ m_abis->setText(abiNames.join(QLatin1String(", ")));
+}
+
void DebuggerItemConfigWidget::setItem(const DebuggerItem &item)
{
store(); // store away the (changed) settings for future use
@@ -157,17 +159,41 @@ void DebuggerItemConfigWidget::setItem(const DebuggerItem &item)
m_cdbLabel->setVisible(!text.isEmpty());
m_binaryChooser->setCommandVersionArguments(QStringList(versionCommand));
- m_abis->setText(item.abiNames().join(QLatin1String(", ")));
+ setAbis(item.abiNames());
+ m_engineType = item.engineType();
}
void DebuggerItemConfigWidget::apply()
{
- DebuggerItem item = m_model->currentDebugger();
- if (!item.isValid())
+ DebuggerItem current = m_model->currentDebugger();
+ if (!current.isValid())
return; // Nothing was selected here.
- item = store();
- setItem(item);
+ store();
+ setItem(item());
+}
+
+void DebuggerItemConfigWidget::commandWasChanged()
+{
+ // Use DebuggerItemManager as a cache:
+ const DebuggerItem *existing
+ = DebuggerItemManager::findByCommand(m_binaryChooser->fileName());
+ if (existing) {
+ setAbis(existing->abiNames());
+ m_engineType = existing->engineType();
+ } else {
+ QFileInfo fi = QFileInfo(m_binaryChooser->path());
+ if (fi.isExecutable()) {
+ DebuggerItem tmp = item();
+ tmp.reinitializeFromFile();
+ setAbis(tmp.abiNames());
+ m_engineType = tmp.engineType();
+ } else {
+ setAbis(QStringList());
+ m_engineType = NoEngineType;
+ }
+ }
+ m_model->updateDebugger(item());
}
// --------------------------------------------------------------------------
diff --git a/src/plugins/debugger/debuggeroptionspage.h b/src/plugins/debugger/debuggeroptionspage.h
index fd1782f4b4..29089b4f52 100644
--- a/src/plugins/debugger/debuggeroptionspage.h
+++ b/src/plugins/debugger/debuggeroptionspage.h
@@ -30,15 +30,23 @@
#ifndef DEBUGGER_DEBUGGEROPTIONSPAGE_H
#define DEBUGGER_DEBUGGEROPTIONSPAGE_H
+#include "debuggeritem.h"
+
#include <coreplugin/dialogs/ioptionspage.h>
+#include <QWidget>
+
QT_BEGIN_NAMESPACE
+class QLabel;
+class QLineEdit;
class QPushButton;
class QTreeView;
-class QWidget;
QT_END_NAMESPACE
-namespace Utils { class DetailsWidget; }
+namespace Utils {
+class DetailsWidget;
+class PathChooser;
+} // namespace Utils
namespace Debugger {
namespace Internal {
@@ -47,6 +55,37 @@ class DebuggerItemModel;
class DebuggerItemConfigWidget;
class DebuggerKitConfigWidget;
+// -----------------------------------------------------------------------
+// DebuggerItemConfigWidget
+// -----------------------------------------------------------------------
+
+class DebuggerItemConfigWidget : public QWidget
+{
+ Q_OBJECT
+
+public:
+ explicit DebuggerItemConfigWidget(DebuggerItemModel *model);
+ void setItem(const DebuggerItem &item);
+ void apply();
+
+private slots:
+ void commandWasChanged();
+
+private:
+ DebuggerItem item() const;
+ void store() const;
+ void setAbis(const QStringList &abiNames);
+
+ QLineEdit *m_displayNameLineEdit;
+ QLabel *m_cdbLabel;
+ Utils::PathChooser *m_binaryChooser;
+ QLineEdit *m_abis;
+ DebuggerItemModel *m_model;
+ bool m_autodetected;
+ DebuggerEngineType m_engineType;
+ QVariant m_id;
+};
+
// --------------------------------------------------------------------------
// DebuggerOptionsPage
// --------------------------------------------------------------------------
diff --git a/src/plugins/debugger/debuggerplugin.cpp b/src/plugins/debugger/debuggerplugin.cpp
index a68df5c9c0..f1a02a89d3 100644
--- a/src/plugins/debugger/debuggerplugin.cpp
+++ b/src/plugins/debugger/debuggerplugin.cpp
@@ -684,7 +684,7 @@ static bool currentTextEditorPosition(ContextData *data)
data->fileName = document->filePath();
if (document->property(Constants::OPENED_WITH_DISASSEMBLY).toBool()) {
int lineNumber = textEditor->currentLine();
- QString line = textEditor->textDocument()->contents()
+ QString line = textEditor->textDocument()->plainText()
.section(QLatin1Char('\n'), lineNumber - 1, lineNumber - 1);
data->address = DisassemblerLine::addressFromDisassemblyLine(line);
} else {
@@ -1843,7 +1843,7 @@ void DebuggerPluginPrivate::requestContextMenu(ITextEditor *editor,
ITextEditorDocument *document = editor->textDocument();
args.fileName = document->filePath();
if (document->property(Constants::OPENED_WITH_DISASSEMBLY).toBool()) {
- QString line = document->contents()
+ QString line = document->plainText()
.section(QLatin1Char('\n'), lineNumber - 1, lineNumber - 1);
BreakpointResponse needle;
needle.type = BreakpointByAddress;
@@ -1956,7 +1956,7 @@ void DebuggerPluginPrivate::toggleBreakpoint()
QTC_ASSERT(textEditor, return);
const int lineNumber = textEditor->currentLine();
if (textEditor->property(Constants::OPENED_WITH_DISASSEMBLY).toBool()) {
- QString line = textEditor->textDocument()->contents()
+ QString line = textEditor->textDocument()->plainText()
.section(QLatin1Char('\n'), lineNumber - 1, lineNumber - 1);
quint64 address = DisassemblerLine::addressFromDisassemblyLine(line);
toggleBreakpointByAddress(address);
@@ -2013,7 +2013,7 @@ void DebuggerPluginPrivate::requestMark(ITextEditor *editor,
return;
if (editor->property("DisassemblerView").toBool()) {
- QString line = editor->textDocument()->contents()
+ QString line = editor->textDocument()->plainText()
.section(QLatin1Char('\n'), lineNumber - 1, lineNumber - 1);
quint64 address = DisassemblerLine::addressFromDisassemblyLine(line);
toggleBreakpointByAddress(address);
diff --git a/src/plugins/debugger/debuggerprotocol.cpp b/src/plugins/debugger/debuggerprotocol.cpp
index a65f4f2997..b76bce3489 100644
--- a/src/plugins/debugger/debuggerprotocol.cpp
+++ b/src/plugins/debugger/debuggerprotocol.cpp
@@ -33,6 +33,9 @@
#include <QDateTime>
#include <QDebug>
#include <QHostAddress>
+#if QT_VERSION >= 0x050200
+#include <QTimeZone>
+#endif
#include <ctype.h>
@@ -503,6 +506,55 @@ static QTime timeFromData(int ms)
return ms == -1 ? QTime() : QTime(0, 0, 0, 0).addMSecs(ms);
}
+#if QT_VERSION >= 0x050200
+// Stolen and adapted from qdatetime.cpp
+static void getDateTime(qint64 msecs, int status, QDate *date, QTime *time)
+{
+ enum {
+ SECS_PER_DAY = 86400,
+ MSECS_PER_DAY = 86400000,
+ SECS_PER_HOUR = 3600,
+ MSECS_PER_HOUR = 3600000,
+ SECS_PER_MIN = 60,
+ MSECS_PER_MIN = 60000,
+ TIME_T_MAX = 2145916799, // int maximum 2037-12-31T23:59:59 UTC
+ JULIAN_DAY_FOR_EPOCH = 2440588 // result of julianDayFromDate(1970, 1, 1)
+ };
+
+ // Status of date/time
+ enum StatusFlag {
+ NullDate = 0x01,
+ NullTime = 0x02,
+ ValidDate = 0x04,
+ ValidTime = 0x08,
+ ValidDateTime = 0x10,
+ TimeZoneCached = 0x20,
+ SetToStandardTime = 0x40,
+ SetToDaylightTime = 0x80
+ };
+
+ qint64 jd = JULIAN_DAY_FOR_EPOCH;
+ qint64 ds = 0;
+
+ if (qAbs(msecs) >= MSECS_PER_DAY) {
+ jd += (msecs / MSECS_PER_DAY);
+ msecs %= MSECS_PER_DAY;
+ }
+
+ if (msecs < 0) {
+ ds = MSECS_PER_DAY - msecs - 1;
+ jd -= ds / MSECS_PER_DAY;
+ ds = ds % MSECS_PER_DAY;
+ ds = MSECS_PER_DAY - ds - 1;
+ } else {
+ ds = msecs;
+ }
+
+ *date = (status & NullDate) ? QDate() : QDate::fromJulianDay(jd);
+ *time = (status & NullTime) ? QTime() : QTime::fromMSecsSinceStartOfDay(ds);
+}
+#endif
+
QString decodeData(const QByteArray &ba, int encoding)
{
switch (encoding) {
@@ -629,15 +681,42 @@ QString decodeData(const QByteArray &ba, int encoding)
const QByteArray decodedBa = QByteArray::fromHex(ba);
return QString::fromUtf8(decodedBa);
}
- case MillisecondsSinceEpoch: {
- bool ok = false;
- const qint64 ms = ba.toLongLong(&ok);
- if (!ok)
- return QLatin1String(ba);
- QDateTime d;
- d.setTimeSpec(Qt::UTC);
- d.setMSecsSinceEpoch(ms);
- return d.isValid() ? d.toString(Qt::TextDate) : QLatin1String("(invalid)");
+ case DateTimeInternal: { // 29, DateTimeInternal: msecs, spec, offset, tz, status
+#if QT_VERSION >= 0x050200
+ int p0 = ba.indexOf('/');
+ int p1 = ba.indexOf('/', p0 + 1);
+ int p2 = ba.indexOf('/', p1 + 1);
+ int p3 = ba.indexOf('/', p2 + 1);
+
+ qint64 msecs = ba.left(p0).toLongLong();
+ ++p0;
+ Qt::TimeSpec spec = Qt::TimeSpec(ba.mid(p0, p1 - p0).toInt());
+ ++p1;
+ qulonglong offset = ba.mid(p1, p2 - p1).toInt();
+ ++p2;
+ QByteArray timeZoneId = QByteArray::fromHex(ba.mid(p2, p3 - p2));
+ ++p3;
+ int status = ba.mid(p3).toInt();
+
+ QDate date;
+ QTime time;
+ getDateTime(msecs, status, &date, &time);
+
+ QDateTime dateTime;
+ if (spec == Qt::OffsetFromUTC) {
+ dateTime = QDateTime(date, time, spec, offset);
+ } else if (spec == Qt::TimeZone) {
+ if (!QTimeZone::isTimeZoneIdAvailable(timeZoneId))
+ return QLatin1String("<unavailable>");
+ dateTime = QDateTime(date, time, QTimeZone(timeZoneId));
+ } else {
+ dateTime = QDateTime(date, time, spec);
+ }
+ return dateTime.toString();
+#else
+ // "Very plain".
+ return QString::fromLatin1(ba);
+#endif
}
}
qDebug() << "ENCODING ERROR: " << encoding;
diff --git a/src/plugins/debugger/debuggerprotocol.h b/src/plugins/debugger/debuggerprotocol.h
index a71bb6f133..bf90dd226e 100644
--- a/src/plugins/debugger/debuggerprotocol.h
+++ b/src/plugins/debugger/debuggerprotocol.h
@@ -205,7 +205,7 @@ enum DebuggerEncoding
Hex2EncodedFloat8 = 26,
IPv6AddressAndHexScopeId = 27,
Hex2EncodedUtf8WithoutQuotes = 28,
- MillisecondsSinceEpoch = 29
+ DateTimeInternal = 29
};
// Keep in sync with dumper.py, symbolgroupvalue.cpp of CDB
diff --git a/src/plugins/debugger/debuggerrunner.cpp b/src/plugins/debugger/debuggerrunner.cpp
index 59c2158dcf..db2c5b7f5a 100644
--- a/src/plugins/debugger/debuggerrunner.cpp
+++ b/src/plugins/debugger/debuggerrunner.cpp
@@ -75,7 +75,6 @@ DebuggerEngine *createGdbEngine(const DebuggerStartParameters &sp);
DebuggerEngine *createPdbEngine(const DebuggerStartParameters &sp);
DebuggerEngine *createQmlEngine(const DebuggerStartParameters &sp);
DebuggerEngine *createQmlCppEngine(const DebuggerStartParameters &sp, QString *error);
-DebuggerEngine *createLldbLibEngine(const DebuggerStartParameters &sp);
DebuggerEngine *createLldbEngine(const DebuggerStartParameters &sp);
static const char *engineTypeName(DebuggerEngineType et)
@@ -93,8 +92,6 @@ static const char *engineTypeName(DebuggerEngineType et)
return "QML engine";
case Debugger::QmlCppEngineType:
return "QML C++ engine";
- case Debugger::LldbLibEngineType:
- return "LLDB binary engine";
case Debugger::LldbEngineType:
return "LLDB command line engine";
case Debugger::AllEngineTypes:
@@ -518,8 +515,6 @@ DebuggerEngine *DebuggerRunControlFactory::createEngine(DebuggerEngineType et,
return createQmlEngine(sp);
case LldbEngineType:
return createLldbEngine(sp);
- case LldbLibEngineType:
- return createLldbLibEngine(sp);
case QmlCppEngineType:
return createQmlCppEngine(sp, errorMessage);
default:
diff --git a/src/plugins/debugger/disassembleragent.cpp b/src/plugins/debugger/disassembleragent.cpp
index 3dd14440bb..95bda62afd 100644
--- a/src/plugins/debugger/disassembleragent.cpp
+++ b/src/plugins/debugger/disassembleragent.cpp
@@ -192,7 +192,7 @@ void DisassemblerAgent::resetLocation()
if (d->resetLocationScheduled) {
d->resetLocationScheduled = false;
if (d->locationMark)
- d->editor->markableInterface()->removeMark(d->locationMark);
+ d->editor->textDocument()->markableInterface()->removeMark(d->locationMark);
}
}
@@ -346,14 +346,14 @@ void DisassemblerAgent::updateLocationMarker()
int lineNumber = contents.lineForAddress(d->location.address());
if (d->location.needsMarker()) {
if (d->locationMark)
- d->editor->markableInterface()->removeMark(d->locationMark);
+ d->editor->textDocument()->markableInterface()->removeMark(d->locationMark);
delete d->locationMark;
d->locationMark = 0;
if (lineNumber) {
d->locationMark = new ITextMark(lineNumber);
d->locationMark->setIcon(debuggerCore()->locationMarkIcon());
d->locationMark->setPriority(TextEditor::ITextMark::HighPriority);
- d->editor->markableInterface()->addMark(d->locationMark);
+ d->editor->textDocument()->markableInterface()->addMark(d->locationMark);
}
}
@@ -379,7 +379,7 @@ void DisassemblerAgent::updateBreakpointMarkers()
const DisassemblerLines contents = d->contentsAtCurrentLocation();
foreach (TextEditor::ITextMark *marker, d->breakpointMarks)
- d->editor->markableInterface()->removeMark(marker);
+ d->editor->textDocument()->markableInterface()->removeMark(marker);
qDeleteAll(d->breakpointMarks);
d->breakpointMarks.clear();
foreach (BreakpointModelId id, ids) {
@@ -393,7 +393,7 @@ void DisassemblerAgent::updateBreakpointMarkers()
marker->setIcon(handler->icon(id));
marker->setPriority(ITextMark::NormalPriority);
d->breakpointMarks.append(marker);
- d->editor->markableInterface()->addMark(marker);
+ d->editor->textDocument()->markableInterface()->addMark(marker);
}
}
diff --git a/src/plugins/debugger/gdb/gdboptionspage.cpp b/src/plugins/debugger/gdb/gdboptionspage.cpp
index a4a336418f..6651f59a65 100644
--- a/src/plugins/debugger/gdb/gdboptionspage.cpp
+++ b/src/plugins/debugger/gdb/gdboptionspage.cpp
@@ -210,9 +210,9 @@ GdbOptionsPageWidget::GdbOptionsPageWidget(QWidget *parent)
"You can load additional debugging helpers or modify existing ones here.</p>"
"%1</body></html>").arg(howToUsePython));
- textEditCustomDumperCommands = new QTextEdit(groupBoxStartupCommands);
+ textEditCustomDumperCommands = new QTextEdit(groupBoxCustomDumperCommands);
textEditCustomDumperCommands->setAcceptRichText(false);
- textEditCustomDumperCommands->setToolTip(groupBoxStartupCommands->toolTip());
+ textEditCustomDumperCommands->setToolTip(groupBoxCustomDumperCommands->toolTip());
/*
groupBoxPluginDebugging = new QGroupBox(q);
@@ -398,7 +398,7 @@ GdbOptionsPageWidget2::GdbOptionsPageWidget2(QWidget *parent)
checkBoxAutoEnrichParameters->setText(GdbOptionsPage::tr(
"Use common locations for debug information"));
checkBoxAutoEnrichParameters->setToolTip(GdbOptionsPage::tr(
- "<html><head/><body>Add common paths to locations "
+ "<html><head/><body>Adds common paths to locations "
"of debug information such as <i>/usr/src/debug</i> "
"when starting GDB.</body></html>"));
@@ -418,7 +418,7 @@ GdbOptionsPageWidget2::GdbOptionsPageWidget2(QWidget *parent)
checkBoxEnableReverseDebugging = new QCheckBox(groupBoxDangerous);
checkBoxEnableReverseDebugging->setText(GdbOptionsPage::tr("Enable reverse debugging"));
checkBoxEnableReverseDebugging->setToolTip(GdbOptionsPage::tr(
- "<html><head/><body><p>Enable stepping backwards.</p><p>"
+ "<html><head/><body><p>Enables stepping backwards.</p><p>"
"<b>Note:</b> This feature is very slow and unstable on the GDB side. "
"It exhibits unpredictable behavior when going backwards over system "
"calls and is very likely to destroy your debugging session.</p></body></html>"));
@@ -426,14 +426,14 @@ GdbOptionsPageWidget2::GdbOptionsPageWidget2(QWidget *parent)
checkBoxAttemptQuickStart = new QCheckBox(groupBoxDangerous);
checkBoxAttemptQuickStart->setText(GdbOptionsPage::tr("Attempt quick start"));
checkBoxAttemptQuickStart->setToolTip(GdbOptionsPage::tr(
- "<html><head/><body>Postpone reading debug information as long as possible. "
+ "<html><head/><body>Postpones reading debug information as long as possible. "
"This can result in faster startup times at the price of not being able to "
"set breakpoints by file and number.</body></html>"));
checkBoxMultiInferior = new QCheckBox(groupBoxDangerous);
checkBoxMultiInferior->setText(GdbOptionsPage::tr("Debug all children"));
checkBoxMultiInferior->setToolTip(GdbOptionsPage::tr(
- "<html><head/><body>Keep debugging all children after a fork."
+ "<html><head/><body>Keeps debugging all children after a fork."
"</body></html>"));
diff --git a/src/plugins/debugger/lldblib/guest/README b/src/plugins/debugger/lldblib/guest/README
deleted file mode 100644
index be9d4fbee7..0000000000
--- a/src/plugins/debugger/lldblib/guest/README
+++ /dev/null
@@ -1,31 +0,0 @@
-LLDB Guest Engine
-
-You can use the LLDB debugger from the LLVM project with the Qt Creator debugger
-plugin on Mac OS.
-
-For the Qt Creator build to pick up the LLDB Guest Engine,
-you must download the LLDB debugger and configure it
-to be included in the Qt Creator build.
-
-To debug an application, Qt Creator must access the memory of the application.
-On Mac OS X, this requires code signing.
-
-To enable LLDB debugger support in Qt Creator:
-
-1. To download the LLDB debugger, enter the following command:
- svn co http://llvm.org/svn/llvm-project/lldb/trunk lldb
-
-2. To sign the code, follow the instructions in lldb/docs/code-signing.txt.
-
-3. To open LLDB in Xcode for building, enter the following command:
- open lldb.xcodeproj
- then select the Release target and press the build button.
-
-4. In Xcode, press the build button.
-
-5. type the following to have the qt creator build system find your lldb build:
- export WITH_LLDB=/path/to/lldb
-
-6. To rebuild Qt Creator, change back to the top level directory of
- the Qt Creator source, and enter the following command:
- qmake -r && make
diff --git a/src/plugins/debugger/lldblib/guest/lldbengineguest.cpp b/src/plugins/debugger/lldblib/guest/lldbengineguest.cpp
deleted file mode 100644
index 7a5cd176e1..0000000000
--- a/src/plugins/debugger/lldblib/guest/lldbengineguest.cpp
+++ /dev/null
@@ -1,761 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2013 Digia Plc and/or its subsidiary(-ies).
-** Contact: http://www.qt-project.org/legal
-**
-** This file is part of Qt Creator.
-**
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and Digia. For licensing terms and
-** conditions see http://qt.digia.com/licensing. For further information
-** use the contact form at http://qt.digia.com/contact-us.
-**
-** GNU Lesser General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU Lesser
-** General Public License version 2.1 as published by the Free Software
-** Foundation and appearing in the file LICENSE.LGPL included in the
-** packaging of this file. Please review the following information to
-** ensure the GNU Lesser General Public License version 2.1 requirements
-** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
-**
-** In addition, as a special exception, Digia gives you certain additional
-** rights. These rights are described in the Digia Qt LGPL Exception
-** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
-**
-****************************************************************************/
-
-#define QT_NO_CAST_FROM_ASCII
-
-#include "lldbengineguest.h"
-
-#include "debuggeractions.h"
-#include "debuggerconstants.h"
-#include "debuggerdialogs.h"
-#include "debuggerplugin.h"
-#include "debuggerstringutils.h"
-
-#include "breakhandler.h"
-#include "breakpoint.h"
-#include "moduleshandler.h"
-#include "registerhandler.h"
-#include "stackhandler.h"
-#include "watchhandler.h"
-#include "watchutils.h"
-#include "threadshandler.h"
-
-#include <utils/qtcassert.h>
-#include <QDebug>
-#include <QProcess>
-#include <QFileInfo>
-#include <QThread>
-#include <QMutexLocker>
-
-#include <lldb/API/LLDB.h>
-
-#define DEBUG_FUNC_ENTER \
- showMessage(QString(QLatin1String("LLDB guest engine: %1 ")) \
- .arg(QLatin1String(Q_FUNC_INFO))); \
- qDebug("%s", Q_FUNC_INFO)
-
-#define SYNC_INFERIOR_OR(x) if (m_running) { x; }
-
-
-namespace Debugger {
-namespace Internal {
-
-void LldbEventListener::listen(lldb::SBListener *listener)
-{
- while (true) {
- lldb::SBEvent event;
- if (listener->WaitForEvent(1000, event))
- emit lldbEvent(&event);
- }
-}
-
-LldbEngineGuest::LldbEngineGuest()
- : IPCEngineGuest()
- , m_running (false)
- , m_worker (new LldbEventListener)
- , m_lldb (new lldb::SBDebugger)
- , m_target (new lldb::SBTarget)
- , m_process (new lldb::SBProcess)
- , m_listener(new lldb::SBListener("bla"))
- , m_relistFrames (false)
-#if defined(HAVE_LLDB_PRIVATE)
- , py (new PythonLLDBToGdbMiHack)
-#endif
-{
- qRegisterMetaType<lldb::SBListener *>("lldb::SBListener *");
- qRegisterMetaType<lldb::SBEvent *>("lldb::SBEvent *");
-
- m_worker->moveToThread(&m_wThread);
- connect(m_worker, SIGNAL(lldbEvent(lldb::SBEvent*)), this,
- SLOT(lldbEvent(lldb::SBEvent*)), Qt::BlockingQueuedConnection);
- m_wThread.start();
- setObjectName(QLatin1String("LLDBEngineGuest"));
-}
-
-LldbEngineGuest::~LldbEngineGuest()
-{
- delete m_lldb;
- delete m_target;
- delete m_process;
- delete m_listener;
-}
-
-
-void LldbEngineGuest::nuke()
-{
- ::exit(4);
-}
-
-void LldbEngineGuest::setupEngine()
-{
- DEBUG_FUNC_ENTER;
-
- lldb::SBDebugger::Initialize();
-
- *m_lldb = lldb::SBDebugger::Create();
- m_lldb->Initialize();
- if (m_lldb->IsValid())
- notifyEngineSetupOk();
- else
- notifyEngineSetupFailed();
-
-}
-
-void LldbEngineGuest::setupInferior(const QString &executable,
- const QStringList &args, const QStringList &env)
-{
- DEBUG_FUNC_ENTER;
-
- foreach (const QString &s, args) {
- m_arguments.append(s.toLocal8Bit());
- }
- foreach (const QString &s, env) {
- m_environment.append(s.toLocal8Bit());
- }
-
- qDebug("creating target for %s", executable.toLocal8Bit().data());
- showStatusMessage(QLatin1String("starting ") + executable);
- *m_target = m_lldb->CreateTarget(executable.toLocal8Bit().data());
- if (!m_target->IsValid()) {
- notifyInferiorSetupFailed();
- return;
- }
- DEBUG_FUNC_ENTER;
-
- const char **argp = new const char *[m_arguments.count() + 1];
- argp[m_arguments.count()] = 0;
- for (int i = 0; i < m_arguments.count(); i++) {
- argp[i] = m_arguments[i].data();
- }
-
- const char **envp = new const char *[m_environment.count() + 1];
- envp[m_environment.count()] = 0;
- for (int i = 0; i < m_environment.count(); i++) {
- envp[i] = m_environment[i].data();
- }
- lldb::SBError err;
- *m_process = m_target->Launch(argp, envp, NULL, NULL, true, err);
-
- if (!err.Success()) {
- showMessage(QString::fromLocal8Bit(err.GetCString()));
- qDebug() << err.GetCString();
- notifyInferiorSetupFailed();
- }
-
- /*
- * note, the actual string ptrs are still valid. They are in m_environment.
- * They probably leak. Considered the marvelous API, there is not much we can do
- */
- delete [] envp;
-
- if (!m_process->IsValid())
- notifyEngineRunFailed();
- QTC_ASSERT(m_listener->IsValid(), qDebug() << false);
- m_listener->StartListeningForEvents(m_process->GetBroadcaster(), UINT32_MAX);
- QMetaObject::invokeMethod(m_worker, "listen", Qt::QueuedConnection,
- Q_ARG(lldb::SBListener *, m_listener));
- notifyInferiorSetupOk();
-}
-
-void LldbEngineGuest::runEngine()
-{
- DEBUG_FUNC_ENTER;
- m_process->Continue();
-}
-
-void LldbEngineGuest::shutdownInferior()
-{
- DEBUG_FUNC_ENTER;
- m_process->Kill();
-}
-
-void LldbEngineGuest::shutdownEngine()
-{
- DEBUG_FUNC_ENTER;
- m_currentFrame = lldb::SBFrame();
- m_currentThread = lldb::SBThread();
- m_breakpoints.clear();
- m_localesCache.clear();
-
- /*
- * this leaks. However, Terminate is broken and lldb leaks anyway
- * We should kill the engine guest process
- */
-
- *m_lldb = lldb::SBDebugger();
- // leakd.Terminate();
- notifyEngineShutdownOk();
-}
-
-void LldbEngineGuest::detachDebugger()
-{
- DEBUG_FUNC_ENTER;
-}
-
-void LldbEngineGuest::executeStep()
-{
- DEBUG_FUNC_ENTER;
-
- if (!m_currentThread.IsValid())
- return;
- m_currentThread.StepInto();
-}
-
-void LldbEngineGuest::executeStepOut()
-{
- DEBUG_FUNC_ENTER;
-
- if (!m_currentThread.IsValid())
- return;
- m_currentThread.StepOut();
-}
-
-void LldbEngineGuest::executeNext()
-{
- DEBUG_FUNC_ENTER;
-
- if (!m_currentThread.IsValid())
- return;
- m_currentThread.StepOver();
-}
-
-void LldbEngineGuest::executeStepI()
-{
- DEBUG_FUNC_ENTER;
-
- if (!m_currentThread.IsValid())
- return;
- m_currentThread.StepInstruction(false);
-}
-
-void LldbEngineGuest::executeNextI()
-{
- DEBUG_FUNC_ENTER;
-
- if (!m_currentThread.IsValid())
- return;
- m_currentThread.StepInstruction(true);
-}
-
-void LldbEngineGuest::continueInferior()
-{
- DEBUG_FUNC_ENTER;
-
- notifyInferiorRunRequested();
- m_process->Continue();
- showStatusMessage(QLatin1String("resuming inferior"));
-}
-void LldbEngineGuest::interruptInferior()
-{
- DEBUG_FUNC_ENTER;
-
- m_process->Stop();
- notifyInferiorStopOk();
- m_relistFrames = true;
- updateThreads();
-}
-
-void LldbEngineGuest::executeRunToLine(const ContextData &data);
-{
- DEBUG_FUNC_ENTER;
-
- // TODO
- Q_UNUSED(data);
-}
-
-void LldbEngineGuest::executeRunToFunction(const QString &functionName)
-{
- DEBUG_FUNC_ENTER;
-
- // TODO
- Q_UNUSED(functionName);
-}
-void LldbEngineGuest::executeJumpToLine(const ContextData &data);
-{
- DEBUG_FUNC_ENTER;
-
- // TODO
- Q_UNUSED(data);
-}
-
-void LldbEngineGuest::activateFrame(qint64 token)
-{
- DEBUG_FUNC_ENTER;
- SYNC_INFERIOR_OR(showMessage(QLatin1String(
- "activateFrame called while inferior running")); return);
-
- currentFrameChanged(token);
- m_localesCache.clear();
-
- lldb::SBFrame fr = m_currentThread.GetFrameAtIndex(token);
- m_currentFrame = fr;
- lldb::SBSymbolContext context = fr.GetSymbolContext(lldb::eSymbolContextEverything);
- lldb::SBValueList values = fr.GetVariables(true, true, false, true);
- QList<WatchData> wd;
- QByteArray iname = "local";
- for (uint i = 0; i < values.GetSize(); i++) {
- lldb::SBValue v = values.GetValueAtIndex(i);
- if (!v.IsInScope(fr))
- continue;
- getWatchDataR(v, 1, iname, wd);
- }
- updateWatchData(true, wd);
-}
-
-void LldbEngineGuest::requestUpdateWatchData(const Internal::WatchData &data,
- const Internal::WatchUpdateFlags &)
-{
- DEBUG_FUNC_ENTER;
- SYNC_INFERIOR_OR(return);
-
- lldb::SBValue v = m_localesCache.value(QString::fromUtf8(data.iname));
- QList<WatchData> wd;
- for (uint j = 0; j < v.GetNumChildren(); j++) {
- lldb::SBValue vv = v.GetChildAtIndex(j);
- getWatchDataR(vv, 1, data.iname, wd);
- }
- updateWatchData(false, wd);
-}
-
-void LldbEngineGuest::getWatchDataR(lldb::SBValue v, int level,
- const QByteArray &p_iname, QList<WatchData> &wd)
-{
- QByteArray iname = p_iname + '.' + QByteArray(v.GetName());
- m_localesCache.insert(QString::fromLocal8Bit(iname), v);
-
-#if defined(HAVE_LLDB_PRIVATE)
- wd += py->expand(p_iname, v, m_currentFrame, *m_process);
-#else
- WatchData d;
- d.name = QString::fromLocal8Bit(v.GetName());
- d.iname = iname;
- d.type = QByteArray(v.GetTypeName()).trimmed();
- d.value = (QString::fromLocal8Bit(v.GetValue(m_currentFrame)));
- d.hasChildren = v.GetNumChildren();
- d.state = WatchData::State(0);
- wd.append(d);
-#endif
-
- if (--level > 0) {
- for (uint j = 0; j < v.GetNumChildren(); j++) {
- lldb::SBValue vv = v.GetChildAtIndex(j);
- getWatchDataR(vv, level, iname, wd);
- }
- }
-}
-
-void LldbEngineGuest::disassemble(quint64 pc)
-{
- DEBUG_FUNC_ENTER;
- SYNC_INFERIOR_OR(return);
-
- if (!m_currentThread.IsValid())
- return;
- for (uint j = 0; j < m_currentThread.GetNumFrames(); j++) {
- lldb::SBFrame fr = m_currentThread.GetFrameAtIndex(j);
- if (pc == fr.GetPCAddress().GetLoadAddress(*m_target)) {
- QString linesStr = QString::fromLocal8Bit(fr.Disassemble());
- DisassemblerLines lines;
- foreach (const QString &lineStr, linesStr.split(QLatin1Char('\n'))) {
- lines.appendLine(DisassemblerLine(lineStr));
- }
- disassembled(pc, lines);
- }
- }
-}
-void LldbEngineGuest::fetchFrameSource(qint64 frame)
-{
- QFile f(m_frame_to_file.value(frame));
- f.open(QFile::ReadOnly);
- frameSourceFetched(frame, QFileInfo(m_frame_to_file.value(frame)).fileName()
- , QString::fromLocal8Bit(f.readAll()));
-}
-
-void LldbEngineGuest::addBreakpoint(BreakpointId id,
- const Internal::BreakpointParameters &bp_)
-{
- DEBUG_FUNC_ENTER;
- SYNC_INFERIOR_OR(notifyAddBreakpointFailed(id); return);
-
- Internal::BreakpointParameters bp(bp_);
-
- lldb::SBBreakpoint llbp = m_target->BreakpointCreateByLocation(
- bp.fileName.toLocal8Bit().constData(), bp.lineNumber);
- if (llbp.IsValid()) {
- m_breakpoints.insert(id, llbp);
-
- llbp.SetIgnoreCount(bp.ignoreCount);
- bp.ignoreCount = llbp.GetIgnoreCount();
- bp.enabled = llbp.IsEnabled();
-
- lldb::SBBreakpointLocation location = llbp.GetLocationAtIndex(0);
- if (location.IsValid()) {
- bp.address = location.GetLoadAddress();
-
- // FIXME get those from lldb
- bp.lineNumber = bp.lineNumber;
- bp.fileName = bp.fileName;
- notifyAddBreakpointOk(id);
- showMessage(QLatin1String("[BB] ok."));
- notifyBreakpointAdjusted(id, bp);
- } else {
- m_breakpoints.take(id);
- showMessage(QLatin1String("[BB] failed. cant resolve yet"));
-// notifyAddBreakpointFailed(id);
-// notifyAddBreakpointOk(id);
- }
- } else {
- showMessage(QLatin1String("[BB] failed. dunno."));
- notifyAddBreakpointFailed(id);
- }
-}
-
-void LldbEngineGuest::removeBreakpoint(BreakpointId id)
-{
- DEBUG_FUNC_ENTER;
- SYNC_INFERIOR_OR(notifyRemoveBreakpointFailed(id); return);
-
- lldb::SBBreakpoint llbp = m_breakpoints.take(id);
- llbp.SetEnabled(false);
- notifyRemoveBreakpointOk(id);
-}
-
-void LldbEngineGuest::changeBreakpoint(BreakpointId id,
- const Internal::BreakpointParameters &bp)
-{
- DEBUG_FUNC_ENTER;
-
- // TODO
- Q_UNUSED(id);
- Q_UNUSED(bp);
-}
-
-void LldbEngineGuest::selectThread(qint64 token)
-{
- DEBUG_FUNC_ENTER;
- SYNC_INFERIOR_OR(return);
-
- m_frame_to_file.clear();
- for (uint i = 0; i < m_process->GetNumThreads(); i++) {
- lldb::SBThread t = m_process->GetThreadAtIndex(i);
- if (t.GetThreadID() == token) {
- m_currentThread = t;
- StackFrames frames;
- int firstResolvableFrame = -1;
- for (uint j = 0; j < t.GetNumFrames(); j++) {
- lldb::SBFrame fr = t.GetFrameAtIndex(j);
- if (!fr.IsValid()) {
- qDebug("warning: frame %i is garbage", j);
- continue;
- }
- lldb::SBSymbolContext context =
- fr.GetSymbolContext(lldb::eSymbolContextEverything);
- lldb::SBSymbol sym = fr.GetSymbol();
- lldb::SBFunction func = fr.GetFunction();
- lldb::SBCompileUnit tu = fr.GetCompileUnit();
- lldb::SBModule module = fr.GetModule();
- lldb::SBBlock block = fr.GetBlock();
- lldb::SBBlock fblock = fr.GetFrameBlock();
- lldb::SBLineEntry le = fr.GetLineEntry();
- lldb::SBValueList values = fr.GetVariables(true, true, true, false);
-#if 0
- qDebug()<<"\tframe "<<fr.GetFrameID();
- qDebug() << "\t\tPC: " << ("0x" + QByteArray::number(
- fr.GetPCAddress().GetLoadAddress(*m_target), 16)).data();
- qDebug() << "\t\tFP: " << ("0x" + QByteArray::number(fr.GetFP(), 16)).data();
- qDebug() << "\t\tSP: " << ("0x" + QByteArray::number(fr.GetSP(), 16)).data();
- qDebug() << "\t\tsymbol: " << sym.IsValid() << sym.GetName() << sym.GetMangledName();
- qDebug() << "\t\tfunction:" << func.IsValid();
- qDebug() << "\t\ttu: " << tu.IsValid();
- if (tu.IsValid())
-
- qDebug() << "\t\tmodule: " << module.IsValid() << module.GetFileSpec().IsValid()
- << module.GetFileSpec().GetFilename();
- qDebug() << "\t\tblock: " << block.IsValid() << block.GetInlinedName();
- qDebug() << "\t\tfblock: " << block.IsValid() << block.GetInlinedName();
- qDebug() << "\t\tle: " << le.IsValid() << le.GetLine()<<le.GetColumn();
- qDebug() << "\t\tvalues: "<<values.IsValid() << values.GetSize();
- qDebug() << "\t\tcontext: " << context.IsValid();
- qDebug() << "\t\t\tmodule: " << context.GetModule().IsValid();
- qDebug() << "\t\t\tfunction: " << context.GetFunction().IsValid();
- qDebug() << "\t\t\tblock: " << context.GetBlock().IsValid();
- qDebug() << "\t\t\tle: " << context.GetLineEntry().IsValid();
- qDebug() << "\t\t\tsymbol: " << context.GetSymbol().IsValid();
-// qDebug() << "\t\tdisassemly -->\n" << fr.Disassemble() << "<--";
-#endif
-
- QString sourceFile;
- QString sourceFilePath;
- int lineNumber = 0;
- if (le.IsValid()) {
- lineNumber = le.GetLine();
- if (le.GetFileSpec().IsValid()) {
- sourceFile = QString::fromLocal8Bit(le.GetFileSpec().GetFilename());
- sourceFilePath = QString::fromLocal8Bit(le.GetFileSpec().GetDirectory())
- + QLatin1String("/") + sourceFile;
- if (firstResolvableFrame < 0)
- firstResolvableFrame = j;
- }
- }
- sourceFilePath = QFileInfo(sourceFilePath).canonicalFilePath();
-
- QString functionName;
- if (func.IsValid())
- functionName = QString::fromLocal8Bit(func.GetName());
- else
- functionName = QString::fromLocal8Bit(sym.GetName());
-
- StackFrame frame;
- frame.level = fr.GetFrameID();
- if (func.IsValid())
- frame.function = QString::fromLocal8Bit(func.GetName());
- else
- frame.function = QString::fromLocal8Bit(sym.GetName());
- frame.from = QString::fromLocal8Bit(module.GetFileSpec().GetFilename());
- frame.address = fr.GetPCAddress().GetLoadAddress(*m_target);
- frame.line = lineNumber;
- frame.file = sourceFilePath;
- frame.usable = QFileInfo(frame.file).isReadable();
- frames.append(frame);
- m_frame_to_file.insert(j, frame.file);
- }
- currentThreadChanged(token);
- listFrames(frames);
- activateFrame(firstResolvableFrame > -1 ? firstResolvableFrame : 0);
- return;
- }
- }
-}
-
-void LldbEngineGuest::updateThreads()
-{
- DEBUG_FUNC_ENTER;
- SYNC_INFERIOR_OR(return);
-
- /* There is no way to find the StopReason of a _process_
- * We try to emulate gdb here, by assuming there must be exactly one 'guilty' thread.
- * However, if there are no threads at all, it must be that the process
- * no longer exists. Let's tear down the whole session.
- */
- if (m_process->GetNumThreads() < 1) {
- notifyEngineSpontaneousShutdown();
- m_process->Kill();
- m_process->Destroy();
- }
-
- Threads threads;
- for (uint i = 0; i < m_process->GetNumThreads(); i++) {
- lldb::SBThread t = m_process->GetThreadAtIndex(i);
- if (!t.IsValid()) {
- qDebug("warning: thread %i is garbage", i);
- continue;
- }
- ThreadData thread;
- thread.id = t.GetThreadID();
- thread.targetId = QString::number(t.GetThreadID());
- thread.core.clear();
- thread.state = QString::number(t.GetStopReason());
-
- switch (t.GetStopReason()) {
- case lldb::eStopReasonInvalid:
- case lldb::eStopReasonNone:
- case lldb::eStopReasonTrace:
- thread.state = QLatin1String("running");
- break;
- case lldb::eStopReasonBreakpoint:
- case lldb::eStopReasonWatchpoint:
- showStatusMessage(QLatin1String("hit breakpoint"));
- thread.state = QLatin1String("hit breakpoint");
- if (m_currentThread.GetThreadID() != t.GetThreadID()) {
- m_currentThread = t;
- currentThreadChanged(t.GetThreadID());
- m_relistFrames = true;
- }
- break;
- case lldb::eStopReasonSignal:
- showStatusMessage(QLatin1String("stopped"));
- thread.state = QLatin1String("stopped");
- if (m_currentThread.GetThreadID() != t.GetThreadID()) {
- m_currentThread = t;
- currentThreadChanged(t.GetThreadID());
- m_relistFrames = true;
- }
- break;
- case lldb::eStopReasonException:
- showStatusMessage(QLatin1String("application crashed."));
- thread.state = QLatin1String("crashed");
- if (m_currentThread.GetThreadID() != t.GetThreadID()) {
- m_currentThread = t;
- currentThreadChanged(t.GetThreadID());
- m_relistFrames = true;
- }
- break;
- case lldb::eStopReasonPlanComplete:
- thread.state = QLatin1String("crazy things happened");
- break;
- };
-
- thread.lineNumber = 0;
- thread.name = QString::fromLocal8Bit(t.GetName());
-
- lldb::SBFrame fr = t.GetFrameAtIndex(0);
- if (!fr.IsValid()) {
- qDebug("warning: frame 0 is garbage");
- continue;
- }
- lldb::SBSymbolContext context = fr.GetSymbolContext(lldb::eSymbolContextEverything);
- lldb::SBSymbol sym = fr.GetSymbol();
- lldb::SBFunction func = fr.GetFunction();
- lldb::SBLineEntry le = fr.GetLineEntry();
- QString sourceFile;
- QString sourceFilePath;
- int lineNumber = 0;
- if (le.IsValid()) {
- lineNumber = le.GetLine();
- if (le.GetFileSpec().IsValid()) {
- sourceFile = QString::fromLocal8Bit(le.GetFileSpec().GetFilename());
- sourceFilePath = QString::fromLocal8Bit(le.GetFileSpec().GetDirectory())
- + QLatin1String("/") + sourceFile;
- }
- }
- QString functionName;
- if (func.IsValid())
- functionName = QString::fromLocal8Bit(func.GetName());
- else
- functionName = QString::fromLocal8Bit(sym.GetName());
-
- lldb::SBValueList values = fr.GetVariables(true, true, false, false);
- thread.fileName = sourceFile;
- thread.function = functionName;
- thread.address = fr.GetPCAddress().GetLoadAddress(*m_target);
- thread.lineNumber = lineNumber;
- threads.append(thread);
- }
- listThreads(threads);
- if (m_relistFrames) {
- selectThread(m_currentThread.GetThreadID());
- m_relistFrames = false;
- }
-}
-
-void LldbEngineGuest::lldbEvent(lldb::SBEvent *ev)
-{
- qDebug() << "lldbevent" << ev->GetType() <<
- m_process->GetState() << (int)state();
-
- uint32_t etype = ev->GetType();
- switch (etype) {
- // ProcessEvent
- case 1:
- switch (m_process->GetState()) {
- case lldb::eStateRunning: // 5
- if (!m_running)
- m_running = true;
- notifyInferiorPid(m_process->GetProcessID());
- switch (state()) {
- case EngineRunRequested:
- notifyEngineRunAndInferiorRunOk();
- break;
- case InferiorRunRequested:
- notifyInferiorRunOk();
- break;
- case InferiorStopOk:
- notifyInferiorRunRequested();
- notifyInferiorRunOk();
- break;
- default:
- break;
- }
- break;
- case lldb::eStateExited: // 9
- if (m_running)
- m_running = false;
- switch (state()) {
- case InferiorShutdownRequested:
- notifyInferiorShutdownOk();
- break;
- case InferiorRunOk:
- m_relistFrames = true;
- updateThreads();
- notifyEngineSpontaneousShutdown();
- m_process->Kill();
- m_process->Destroy();
- break;
- default:
- updateThreads();
- break;
- }
- break;
- case lldb::eStateStopped: // 4
- if (m_running)
- m_running = false;
- switch (state()) {
- case InferiorShutdownRequested:
- notifyInferiorShutdownOk();
- break;
- case InferiorRunOk:
- m_relistFrames = true;
- updateThreads();
- notifyInferiorSpontaneousStop();
- // fall
- default:
- m_relistFrames = true;
- updateThreads();
- break;
- }
- break;
- case lldb::eStateCrashed: // 7
- if (m_running)
- m_running = false;
- switch (state()) {
- case InferiorShutdownRequested:
- notifyInferiorShutdownOk();
- break;
- case InferiorRunOk:
- m_relistFrames = true;
- updateThreads();
- notifyInferiorSpontaneousStop();
- break;
- default:
- break;
- }
- break;
- default:
- qDebug("unexpected ProcessEvent");
- break;
- }
- break;
- default:
- break;
- };
-}
-
-
-} // namespace Internal
-} // namespace Debugger
diff --git a/src/plugins/debugger/lldblib/guest/lldbengineguest.h b/src/plugins/debugger/lldblib/guest/lldbengineguest.h
deleted file mode 100644
index c11ac3f0a3..0000000000
--- a/src/plugins/debugger/lldblib/guest/lldbengineguest.h
+++ /dev/null
@@ -1,136 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2013 Digia Plc and/or its subsidiary(-ies).
-** Contact: http://www.qt-project.org/legal
-**
-** This file is part of Qt Creator.
-**
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and Digia. For licensing terms and
-** conditions see http://qt.digia.com/licensing. For further information
-** use the contact form at http://qt.digia.com/contact-us.
-**
-** GNU Lesser General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU Lesser
-** General Public License version 2.1 as published by the Free Software
-** Foundation and appearing in the file LICENSE.LGPL included in the
-** packaging of this file. Please review the following information to
-** ensure the GNU Lesser General Public License version 2.1 requirements
-** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
-**
-** In addition, as a special exception, Digia gives you certain additional
-** rights. These rights are described in the Digia Qt LGPL Exception
-** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
-**
-****************************************************************************/
-
-#ifndef DEBUGGER_LLDBENGINE_GUEST_H
-#define DEBUGGER_LLDBENGINE_GUEST_H
-
-#include "ipcengineguest.h"
-
-#include <QQueue>
-#include <QVariant>
-#include <QThread>
-#include <QStringList>
-
-#include <lldb/API/LLDB.h>
-
-#if defined(HAVE_LLDB_PRIVATE)
-#include "pygdbmiemu.h"
-#endif
-
-Q_DECLARE_METATYPE (lldb::SBListener *)
-Q_DECLARE_METATYPE (lldb::SBEvent *)
-
-namespace Debugger {
-namespace Internal {
-
-class LldbEventListener : public QObject
-{
-Q_OBJECT
-public slots:
- void listen(lldb::SBListener *listener);
-signals:
- // lldb API uses non thread safe implicit sharing with no explicit copy feature
- // additionally the scope is undefined, hence this signal needs to be connected BlockingQueued
- // whutever, works for now.
- void lldbEvent(lldb::SBEvent *ev);
-};
-
-
-class LldbEngineGuest : public IPCEngineGuest
-{
- Q_OBJECT
-
-public:
- explicit LldbEngineGuest();
- ~LldbEngineGuest();
-
- void nuke();
- void setupEngine();
- void setupInferior(const QString &executable, const QStringList &arguments,
- const QStringList &environment);
- void runEngine();
- void shutdownInferior();
- void shutdownEngine();
- void detachDebugger();
- void executeStep();
- void executeStepOut() ;
- void executeNext();
- void executeStepI();
- void executeNextI();
- void continueInferior();
- void interruptInferior();
- void executeRunToLine(const ContextData &data);
- void executeRunToFunction(const QString &functionName);
- void executeJumpToLine(const ContextData &data);
- void activateFrame(qint64);
- void selectThread(qint64);
- void disassemble(quint64 pc);
- void addBreakpoint(BreakpointModelId id, const BreakpointParameters &bp);
- void removeBreakpoint(BreakpointModelId id);
- void changeBreakpoint(BreakpointModelId id, const BreakpointParameters &bp);
- void requestUpdateWatchData(const WatchData &data,
- const WatchUpdateFlags &flags);
- void fetchFrameSource(qint64 frame);
-
-private:
- bool m_running;
-
- QList<QByteArray> m_arguments;
- QList<QByteArray> m_environment;
- QThread m_wThread;
- LldbEventListener *m_worker;
- lldb::SBDebugger *m_lldb;
- lldb::SBTarget *m_target;
- lldb::SBProcess *m_process;
- lldb::SBListener *m_listener;
-
- lldb::SBFrame m_currentFrame;
- lldb::SBThread m_currentThread;
- bool m_relistFrames;
- QHash<QString, lldb::SBValue> m_localesCache;
- QHash<BreakpointModelId, lldb::SBBreakpoint> m_breakpoints;
- QHash<qint64, QString> m_frame_to_file;
-
- void updateThreads();
- void getWatchDataR(lldb::SBValue v, int level,
- const QByteArray &p_iname, QList<WatchData> &wd);
-
-#if defined(HAVE_LLDB_PRIVATE)
- PythonLLDBToGdbMiHack * py;
-#endif
-
-private slots:
- void lldbEvent(lldb::SBEvent *ev);
-};
-
-} // namespace Internal
-} // namespace Debugger
-
-#endif // DEBUGGER_LLDBENGINE_H
-#define SYNC_INFERIOR
diff --git a/src/plugins/debugger/lldblib/guest/main.cpp b/src/plugins/debugger/lldblib/guest/main.cpp
deleted file mode 100644
index 9803a490f8..0000000000
--- a/src/plugins/debugger/lldblib/guest/main.cpp
+++ /dev/null
@@ -1,151 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2013 Digia Plc and/or its subsidiary(-ies).
-** Contact: http://www.qt-project.org/legal
-**
-** This file is part of Qt Creator.
-**
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and Digia. For licensing terms and
-** conditions see http://qt.digia.com/licensing. For further information
-** use the contact form at http://qt.digia.com/contact-us.
-**
-** GNU Lesser General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU Lesser
-** General Public License version 2.1 as published by the Free Software
-** Foundation and appearing in the file LICENSE.LGPL included in the
-** packaging of this file. Please review the following information to
-** ensure the GNU Lesser General Public License version 2.1 requirements
-** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
-**
-** In addition, as a special exception, Digia gives you certain additional
-** rights. These rights are described in the Digia Qt LGPL Exception
-** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
-**
-****************************************************************************/
-
-#include "lldbengineguest.h"
-
-#include <QLocalSocket>
-#include <QCoreApplication>
-#include <QSocketNotifier>
-#include <QQueue>
-
-#include <cstdio>
-
-// #define DO_STDIO_DEBUG 1
-#ifdef DO_STDIO_DEBUG
-#define D_STDIO0(x) qDebug(x)
-#define D_STDIO1(x,a1) qDebug(x,a1)
-#define D_STDIO2(x,a1,a2) qDebug(x,a1,a2)
-#define D_STDIO3(x,a1,a2,a3) qDebug(x,a1,a2,a3)
-#else
-#define D_STDIO0(x)
-#define D_STDIO1(x,a1)
-#define D_STDIO2(x,a1,a2)
-#define D_STDIO3(x,a1,a2,a3)
-#endif
-
-class Stdio : public QIODevice
-{
- Q_OBJECT
-public:
- QSocketNotifier notify;
- Stdio()
- : QIODevice()
- , notify(fileno(stdin), QSocketNotifier::Read)
- , buckethead(0)
- {
- setvbuf(stdin , NULL , _IONBF , 0);
- setvbuf(stdout , NULL , _IONBF , 0);
- setOpenMode(QIODevice::ReadWrite | QIODevice::Unbuffered);
- connect(&notify, SIGNAL(activated(int)), this, SLOT(activated()));
- }
- virtual qint64 bytesAvailable () const
- {
- qint64 r = QIODevice::bytesAvailable();
- foreach (const QByteArray &bucket, buckets)
- r += bucket.size();
- r-= buckethead;
- return r;
- }
-
- virtual qint64 readData (char * data, qint64 maxSize)
- {
- D_STDIO1("readData %lli",maxSize);
- qint64 size = maxSize;
- while (size > 0) {
- if (!buckets.size()) {
- D_STDIO1("done prematurely with %lli", maxSize - size);
- return maxSize - size;
- }
- QByteArray &bucket = buckets.head();
- if ((size + buckethead) >= bucket.size()) {
- int d = bucket.size() - buckethead;
- D_STDIO3("read (over bucket) d: %i buckethead: %i bucket.size(): %i",
- d, buckethead, bucket.size());
- memcpy(data, bucket.data() + buckethead, d);
- data += d;
- size -= d;
- buckets.dequeue();
- buckethead = 0;
- } else {
- D_STDIO1("read (in bucket) size: %lli", size);
- memcpy(data, bucket.data() + buckethead, size);
- data += size;
- buckethead += size;
- size = 0;
- }
- }
- D_STDIO1("done with %lli",(maxSize - size));
- return maxSize - size;
- }
-
- virtual qint64 writeData (const char * data, qint64 maxSize)
- {
- return ::write(fileno(stdout), data, maxSize);
- }
-
- QQueue<QByteArray> buckets;
- int buckethead;
-
-private slots:
- void activated()
- {
- QByteArray a;
- a.resize(1000);
- int ret = ::read(fileno(stdin), a.data(), 1000);
- if (ret == 0)
- ::exit(0);
- assert(ret <= 1000);
- D_STDIO1("activated %i", ret);
- a.resize(ret);
- buckets.enqueue(a);
- emit readyRead();
- }
-};
-
-int main(int argc, char **argv)
-{
- QCoreApplication app(argc, argv);
- qDebug() << "guest engine operational";
-
- Debugger::Internal::LldbEngineGuest lldb;
-
-
- Stdio stdio;
- lldb.setHostDevice(&stdio);
-
- return app.exec();
-}
-
-extern "C" {
-extern const unsigned char lldbVersionString[] __attribute__ ((used)) = "@(#)PROGRAM:lldb PROJECT:lldb-26" "\n";
-extern const double lldbVersionNumber __attribute__ ((used)) = (double)26.;
-extern const double LLDBVersionNumber __attribute__ ((used)) = (double)26.;
-}
-
-#include "main.moc"
diff --git a/src/plugins/debugger/lldblib/guest/qtcreator-lldb.plist b/src/plugins/debugger/lldblib/guest/qtcreator-lldb.plist
deleted file mode 100644
index c0a3b2beaf..0000000000
--- a/src/plugins/debugger/lldblib/guest/qtcreator-lldb.plist
+++ /dev/null
@@ -1,21 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
-<plist version="1.0">
-<dict>
- <key>CFBundleDevelopmentRegion</key>
- <string>English</string>
- <key>CFBundleIdentifier</key>
- <string>org.qt-project.qtcreator-lldb</string>
- <key>CFBundleInfoDictionaryVersion</key>
- <string>6.0</string>
- <key>CFBundleName</key>
- <string>Qt Creator LLDB Guest</string>
- <key>CFBundleVersion</key>
- <string>1.0</string>
- <key>SecTaskAccess</key>
- <array>
- <string>allowed</string>
- <string>safe</string>
- </array>
-</dict>
-</plist>
diff --git a/src/plugins/debugger/lldblib/guest/qtcreator-lldb.pri b/src/plugins/debugger/lldblib/guest/qtcreator-lldb.pri
deleted file mode 100644
index f44c3e9c84..0000000000
--- a/src/plugins/debugger/lldblib/guest/qtcreator-lldb.pri
+++ /dev/null
@@ -1,2 +0,0 @@
-WITH_LLDB = $$(WITH_LLDB)
-macx: !isEmpty(WITH_LLDB) : SUBDIRS += $$PWD/qtcreator-lldb.pro
diff --git a/src/plugins/debugger/lldblib/guest/qtcreator-lldb.pro b/src/plugins/debugger/lldblib/guest/qtcreator-lldb.pro
deleted file mode 100644
index b6f5437284..0000000000
--- a/src/plugins/debugger/lldblib/guest/qtcreator-lldb.pro
+++ /dev/null
@@ -1,61 +0,0 @@
-WITH_LLDB = $$(WITH_LLDB)
-
-!macx: error (This can only be built on mac)
-!exists($${WITH_LLDB}/include/lldb/lldb-enumerations.h): error(please see the README for build instructions)
-
-QT = core network
-
-include(../../../../../qtcreator.pri)
-TEMPLATE = app
-CONFIG -= app_bundle
-CONFIG += debug
-TARGET = qtcreator-lldb
-DEPENDPATH += . .. ../.. ../../..
-INCLUDEPATH += . .. ../.. ../../..
-DESTDIR = $$IDE_LIBEXEC_PATH
-
-MOC_DIR=.tmp
-OBJECTS_DIR=.tmp
-
-HEADERS += ../ipcengineguest.h \
- ../debuggerstreamops.h \
- ../breakpoint.h \
- ../watchdata.h \
- ../stackframe.h \
- ../disassemblerlines.h \
- lldbengineguest.h
-
-SOURCES += ../ipcengineguest.cpp \
- ../debuggerstreamops.cpp \
- ../breakpoint.cpp \
- ../watchdata.cpp \
- ../stackframe.cpp \
- ../disassemblerlines.cpp \
- lldbengineguest.cpp \
- main.cpp
-
-
-LIBS += -sectcreate __TEXT __info_plist $$PWD/qtcreator-lldb.plist
-
-POSTL = rm -rf \'$${IDE_LIBEXEC_PATH}/LLDB.framework\' $$escape_expand(\\n\\t) \
- $$QMAKE_COPY_DIR $${WITH_LLDB}/build/Release/* \'$$IDE_LIBEXEC_PATH\' $$escape_expand(\\n\\t) \
- install_name_tool -change '@rpath/LLDB.framework/Versions/A/LLDB' '@executable_path/LLDB.framework/Versions/A/LLDB' $(TARGET) $$escape_expand(\\n\\t) \
- codesign -s lldb_codesign $(TARGET)
-
-!isEmpty(QMAKE_POST_LINK):QMAKE_POST_LINK = $$escape_expand(\\n\\t)$$QMAKE_POST_LINK
-QMAKE_POST_LINK = $$POSTL $$QMAKE_POST_LINK
-silent:QMAKE_POST_LINK = @echo signing $@ && $$QMAKE_POST_LINK
-
-LIBS += -framework Security -framework Python
-
-DEFINES += __STDC_LIMIT_MACROS __STDC_CONSTANT_MACROS
-
-INCLUDEPATH += $${WITH_LLDB}/include $${WITH_LLDB}/llvm/include/
-LIBS += -F$${WITH_LLDB}/build/Release -framework LLDB
-
-# include (lldb.pri)
-# DEFINES += HAVE_LLDB_PRIVATE
-# HEADERS += pygdbmiemu.h
-# SOURCES += pygdbmiemu.cpp
-
-
diff --git a/src/plugins/debugger/lldblib/ipcengineguest.cpp b/src/plugins/debugger/lldblib/ipcengineguest.cpp
deleted file mode 100644
index 50ebae4177..0000000000
--- a/src/plugins/debugger/lldblib/ipcengineguest.cpp
+++ /dev/null
@@ -1,637 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2013 Digia Plc and/or its subsidiary(-ies).
-** Contact: http://www.qt-project.org/legal
-**
-** This file is part of Qt Creator.
-**
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and Digia. For licensing terms and
-** conditions see http://qt.digia.com/licensing. For further information
-** use the contact form at http://qt.digia.com/contact-us.
-**
-** GNU Lesser General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU Lesser
-** General Public License version 2.1 as published by the Free Software
-** Foundation and appearing in the file LICENSE.LGPL included in the
-** packaging of this file. Please review the following information to
-** ensure the GNU Lesser General Public License version 2.1 requirements
-** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
-**
-** In addition, as a special exception, Digia gives you certain additional
-** rights. These rights are described in the Digia Qt LGPL Exception
-** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
-**
-****************************************************************************/
-
-#include "ipcengineguest.h"
-#include "ipcenginehost.h"
-#include "breakpoint.h"
-#include "stackframe.h"
-#include "threaddata.h"
-#include "debuggerstreamops.h"
-
-#include <utils/qtcassert.h>
-
-#include <QLocalSocket>
-
-#include <QSysInfo>
-#include <QDebug>
-#include <QFileInfo>
-#include <QTimer>
-
-#if Q_BYTE_ORDER == Q_LITTLE_ENDIAN
-#define SET_NATIVE_BYTE_ORDER(x) x.setByteOrder(QDataStream::LittleEndian)
-#else
-#define SET_NATIVE_BYTE_ORDER(x) x.setByteOrder(QDataStream::BigEndian)
-#endif
-
-namespace Debugger {
-namespace Internal {
-
-IPCEngineGuest::IPCEngineGuest()
- : QObject()
- , m_local_host(0)
- , m_nextMessagePayloadSize(0)
- , m_cookie(1)
- , m_device(0)
-{
-}
-
-IPCEngineGuest::~IPCEngineGuest()
-{
-}
-
-void IPCEngineGuest::setLocalHost(IPCEngineHost *host)
-{
- m_local_host = host;
-}
-
-void IPCEngineGuest::setHostDevice(QIODevice *device)
-{
- if (m_device) {
- disconnect(m_device, SIGNAL(readyRead()), this, SLOT(readyRead()));
- delete m_device;
- }
- m_device = device;
- if (m_device)
- connect(m_device, SIGNAL(readyRead()), SLOT(readyRead()));
-}
-
-void IPCEngineGuest::rpcCall(Function f, QByteArray payload)
-{
-#if 0
- if (m_local_host) {
- QMetaObject::invokeMethod(m_local_host,
- "rpcCallback",
- Qt::QueuedConnection,
- Q_ARG(quint64, f),
- Q_ARG(QByteArray, payload));
- } else
-#endif
- if (m_device) {
- {
- QDataStream s(m_device);
- SET_NATIVE_BYTE_ORDER(s);
- s << m_cookie++;
- s << quint64(f);
- s << quint64(payload.size());
- }
- m_device->write(payload);
- m_device->putChar('T');
- QLocalSocket *sock = qobject_cast<QLocalSocket *>(m_device);
- if (sock)
- sock->flush();
- }
-}
-
-void IPCEngineGuest::readyRead()
-{
- if (!m_nextMessagePayloadSize) {
- if (quint64(m_device->bytesAvailable()) < 3 * sizeof(quint64))
- return;
- QDataStream s(m_device);
- SET_NATIVE_BYTE_ORDER(s);
- s >> m_nextMessageCookie;
- s >> m_nextMessageFunction;
- s >> m_nextMessagePayloadSize;
- m_nextMessagePayloadSize += 1; // terminator and "got header" marker
- }
-
- quint64 ba = m_device->bytesAvailable();
- if (ba < m_nextMessagePayloadSize)
- return;
-
- qint64 rrr = m_nextMessagePayloadSize;
- QByteArray payload = m_device->read(rrr);
- if (quint64(payload.size()) != m_nextMessagePayloadSize || !payload.endsWith('T')) {
- qDebug("IPC Error: corrupted frame");
- showMessage(QLatin1String("[guest] IPC Error: corrupted frame"), LogError);
- nuke();
- return;
- }
- payload.chop(1);
- rpcCallback(m_nextMessageFunction, payload);
- m_nextMessagePayloadSize = 0;
-
- if (quint64(m_device->bytesAvailable ()) >= 3 * sizeof(quint64))
- QTimer::singleShot(0, this, SLOT(readyRead()));
-}
-
-void IPCEngineGuest::rpcCallback(quint64 f, QByteArray payload)
-{
- switch (f) {
- default:
- qDebug("IPC Error: unhandled id in host to guest call");
- showMessage(QLatin1String("IPC Error: unhandled id in host to guest call"), LogError);
- nuke();
- break;
- case IPCEngineHost::SetupIPC:
- {
- QDataStream s(payload);
- SET_NATIVE_BYTE_ORDER(s);
- int version;
- s >> version;
- Q_ASSERT(version == 1);
- }
- break;
- case IPCEngineHost::StateChanged:
- {
- QDataStream s(payload);
- SET_NATIVE_BYTE_ORDER(s);
- quint64 st;
- s >> st;
- m_state = (DebuggerState)st;
- }
- break;
- case IPCEngineHost::SetupEngine:
- setupEngine();
- break;
- case IPCEngineHost::SetupInferior:
- {
- QDataStream s(payload);
- SET_NATIVE_BYTE_ORDER(s);
- QString executable;
- QStringList arguments;
- QStringList environment;
- s >> executable;
- s >> arguments;
- s >> environment;
- setupInferior(executable, arguments, environment);
- }
- break;
- case IPCEngineHost::RunEngine:
- runEngine();
- break;
- case IPCEngineHost::ShutdownInferior:
- shutdownInferior();
- break;
- case IPCEngineHost::ShutdownEngine:
- shutdownEngine();
- break;
- case IPCEngineHost::DetachDebugger:
- detachDebugger();
- break;
- case IPCEngineHost::ExecuteStep:
- executeStep();
- break;
- case IPCEngineHost::ExecuteStepOut:
- executeStepOut();
- break;
- case IPCEngineHost::ExecuteNext:
- executeNext();
- break;
- case IPCEngineHost::ExecuteStepI:
- executeStepI();
- break;
- case IPCEngineHost::ExecuteNextI:
- executeNextI();
- break;
- case IPCEngineHost::ContinueInferior:
- continueInferior();
- break;
- case IPCEngineHost::InterruptInferior:
- interruptInferior();
- break;
- case IPCEngineHost::ExecuteRunToLine:
- {
- QDataStream s(payload);
- SET_NATIVE_BYTE_ORDER(s);
- ContextData data;
- s >> data.fileName;
- s >> data.lineNumber;
- executeRunToLine(data);
- }
- break;
- case IPCEngineHost::ExecuteRunToFunction:
- {
- QDataStream s(payload);
- SET_NATIVE_BYTE_ORDER(s);
- QString functionName;
- s >> functionName;
- executeRunToFunction(functionName);
- }
- break;
- case IPCEngineHost::ExecuteJumpToLine:
- {
- QDataStream s(payload);
- SET_NATIVE_BYTE_ORDER(s);
- ContextData data;
- s >> data.fileName;
- s >> data.lineNumber;
- executeJumpToLine(data);
- }
- break;
- case IPCEngineHost::ActivateFrame:
- {
- QDataStream s(payload);
- SET_NATIVE_BYTE_ORDER(s);
- quint64 id;
- s >> id;
- activateFrame(id);
- }
- break;
- case IPCEngineHost::SelectThread:
- {
- QDataStream s(payload);
- SET_NATIVE_BYTE_ORDER(s);
- quint64 id;
- s >> id;
- selectThread(id);
- }
- break;
- case IPCEngineHost::Disassemble:
- {
- QDataStream s(payload);
- SET_NATIVE_BYTE_ORDER(s);
- quint64 pc;
- s >> pc;
- disassemble(pc);
- }
- break;
- case IPCEngineHost::AddBreakpoint:
- {
- QDataStream s(payload);
- SET_NATIVE_BYTE_ORDER(s);
- BreakpointModelId id;
- BreakpointParameters d;
- s >> id;
- s >> d;
- addBreakpoint(id, d);
- }
- break;
- case IPCEngineHost::RemoveBreakpoint:
- {
- QDataStream s(payload);
- SET_NATIVE_BYTE_ORDER(s);
- BreakpointModelId id;
- s >> id;
- removeBreakpoint(id);
- }
- break;
- case IPCEngineHost::ChangeBreakpoint:
- {
- QDataStream s(payload);
- SET_NATIVE_BYTE_ORDER(s);
- BreakpointModelId id;
- BreakpointParameters d;
- s >> id;
- s >> d;
- changeBreakpoint(id, d);
- }
- break;
- case IPCEngineHost::RequestUpdateWatchData:
- {
- QDataStream s(payload);
- SET_NATIVE_BYTE_ORDER(s);
- WatchData data;
- s >> data;
- requestUpdateWatchData(data);
- }
- break;
- case IPCEngineHost::FetchFrameSource:
- {
- QDataStream s(payload);
- SET_NATIVE_BYTE_ORDER(s);
- qint64 id;
- s >> id;
- fetchFrameSource(id);
- }
- break;
- };
-}
-
-DebuggerState IPCEngineGuest::state() const
-{
- return m_state;
-}
-
-void IPCEngineGuest::notifyEngineSetupOk()
-{
- rpcCall(NotifyEngineSetupOk);
-}
-
-void IPCEngineGuest::notifyEngineSetupFailed()
-{
- rpcCall(NotifyEngineSetupFailed);
-}
-
-void IPCEngineGuest::notifyEngineRunFailed()
-{
- rpcCall(NotifyEngineRunFailed);
-}
-
-void IPCEngineGuest::notifyInferiorSetupOk()
-{
- rpcCall(NotifyInferiorSetupOk);
-}
-
-void IPCEngineGuest::notifyInferiorSetupFailed()
-{
- rpcCall(NotifyInferiorSetupFailed);
-}
-
-void IPCEngineGuest::notifyEngineRunAndInferiorRunOk()
-{
- rpcCall(NotifyEngineRunAndInferiorRunOk);
-}
-
-void IPCEngineGuest::notifyEngineRunAndInferiorStopOk()
-{
- rpcCall(NotifyEngineRunAndInferiorStopOk);
-}
-
-void IPCEngineGuest::notifyInferiorRunRequested()
-{
- rpcCall(NotifyInferiorRunRequested);
-}
-
-void IPCEngineGuest::notifyInferiorRunOk()
-{
- rpcCall(NotifyInferiorRunOk);
-}
-
-void IPCEngineGuest::notifyInferiorRunFailed()
-{
- rpcCall(NotifyInferiorRunFailed);
-}
-
-void IPCEngineGuest::notifyInferiorStopOk()
-{
- rpcCall(NotifyInferiorStopOk);
-}
-
-void IPCEngineGuest::notifyInferiorSpontaneousStop()
-{
- rpcCall(NotifyInferiorSpontaneousStop);
-}
-
-void IPCEngineGuest::notifyInferiorStopFailed()
-{
- rpcCall(NotifyInferiorStopFailed);
-}
-
-void IPCEngineGuest::notifyInferiorExited()
-{
- rpcCall(NotifyInferiorExited);
-}
-
-void IPCEngineGuest::notifyInferiorShutdownOk()
-{
- rpcCall(NotifyInferiorShutdownOk);
-}
-
-void IPCEngineGuest::notifyInferiorShutdownFailed()
-{
- rpcCall(NotifyInferiorShutdownFailed);
-}
-
-void IPCEngineGuest::notifyEngineSpontaneousShutdown()
-{
- rpcCall(NotifyEngineSpontaneousShutdown);
-}
-
-void IPCEngineGuest::notifyEngineShutdownOk()
-{
- rpcCall(NotifyEngineShutdownOk);
-}
-
-void IPCEngineGuest::notifyEngineShutdownFailed()
-{
- rpcCall(NotifyEngineShutdownFailed);
-}
-
-void IPCEngineGuest::notifyInferiorIll()
-{
- rpcCall(NotifyInferiorIll);
-}
-
-void IPCEngineGuest::notifyEngineIll()
-{
- rpcCall(NotifyEngineIll);
-}
-
-void IPCEngineGuest::notifyInferiorPid(qint64 pid)
-{
- QByteArray p;
- {
- QDataStream s(&p, QIODevice::WriteOnly);
- SET_NATIVE_BYTE_ORDER(s);
- s << pid;
- }
- rpcCall(NotifyInferiorPid, p);
-}
-
-void IPCEngineGuest::showStatusMessage(const QString &msg, quint64 timeout)
-{
- QByteArray p;
- {
- QDataStream s(&p, QIODevice::WriteOnly);
- SET_NATIVE_BYTE_ORDER(s);
- s << msg;
- s << (qint64)timeout;
- }
- rpcCall(ShowStatusMessage, p);
-}
-
-void IPCEngineGuest::showMessage(const QString &msg, quint16 channel, quint64 timeout)
-{
- QByteArray p;
- {
- QDataStream s(&p, QIODevice::WriteOnly);
- SET_NATIVE_BYTE_ORDER(s);
- s << msg;
- s << (qint64)channel;
- s << (qint64)timeout;
- }
- rpcCall(ShowMessage, p);
-}
-
-void IPCEngineGuest::currentFrameChanged(qint64 osid)
-{
- QByteArray p;
- {
- QDataStream s(&p, QIODevice::WriteOnly);
- SET_NATIVE_BYTE_ORDER(s);
- s << osid;
- }
- rpcCall(CurrentFrameChanged, p);
-}
-
-void IPCEngineGuest::currentThreadChanged(qint64 osid)
-{
- QByteArray p;
- {
- QDataStream s(&p, QIODevice::WriteOnly);
- SET_NATIVE_BYTE_ORDER(s);
- s << osid;
- }
- rpcCall(CurrentThreadChanged, p);
-}
-
-void IPCEngineGuest::listFrames(const StackFrames &frames)
-{
- QByteArray p;
- {
- QDataStream s(&p, QIODevice::WriteOnly);
- SET_NATIVE_BYTE_ORDER(s);
- s << frames;
- }
- rpcCall(ListFrames, p);
-}
-
-void IPCEngineGuest::listThreads(const Threads &threads)
-{
- QByteArray p;
- {
- QDataStream s(&p, QIODevice::WriteOnly);
- SET_NATIVE_BYTE_ORDER(s);
- s << threads;
- }
- rpcCall(ListThreads, p);
-}
-
-void IPCEngineGuest::disassembled(quint64 pc, const DisassemblerLines &da)
-{
- QByteArray p;
- {
- QDataStream s(&p, QIODevice::WriteOnly);
- SET_NATIVE_BYTE_ORDER(s);
- s << pc;
- s << da;
- }
- rpcCall(Disassembled, p);
-}
-
-void IPCEngineGuest::notifyAddBreakpointOk(BreakpointModelId id)
-{
- QByteArray p;
- {
- QDataStream s(&p, QIODevice::WriteOnly);
- SET_NATIVE_BYTE_ORDER(s);
- s << id;
- }
- rpcCall(NotifyAddBreakpointOk, p);
-}
-
-void IPCEngineGuest::notifyAddBreakpointFailed(BreakpointModelId id)
-{
- QByteArray p;
- {
- QDataStream s(&p, QIODevice::WriteOnly);
- SET_NATIVE_BYTE_ORDER(s);
- s << id;
- }
- rpcCall(NotifyAddBreakpointFailed, p);
-}
-
-void IPCEngineGuest::notifyRemoveBreakpointOk(BreakpointModelId id)
-{
- QByteArray p;
- {
- QDataStream s(&p, QIODevice::WriteOnly);
- SET_NATIVE_BYTE_ORDER(s);
- s << id;
- }
- rpcCall(NotifyRemoveBreakpointOk, p);
-}
-
-void IPCEngineGuest::notifyRemoveBreakpointFailed(BreakpointModelId id)
-{
- QByteArray p;
- {
- QDataStream s(&p, QIODevice::WriteOnly);
- SET_NATIVE_BYTE_ORDER(s);
- s << id;
- }
- rpcCall(NotifyRemoveBreakpointFailed, p);
-}
-
-void IPCEngineGuest::notifyChangeBreakpointOk(BreakpointModelId id)
-{
- QByteArray p;
- {
- QDataStream s(&p, QIODevice::WriteOnly);
- SET_NATIVE_BYTE_ORDER(s);
- s << id;
- }
- rpcCall(NotifyChangeBreakpointOk, p);
-}
-
-void IPCEngineGuest::notifyChangeBreakpointFailed(BreakpointModelId id)
-{
- QByteArray p;
- {
- QDataStream s(&p, QIODevice::WriteOnly);
- SET_NATIVE_BYTE_ORDER(s);
- s << id;
- }
- rpcCall(NotifyChangeBreakpointFailed, p);
-}
-
-void IPCEngineGuest::notifyBreakpointAdjusted(BreakpointModelId id,
- const BreakpointParameters &bp)
-{
- QByteArray p;
- {
- QDataStream s(&p, QIODevice::WriteOnly);
- SET_NATIVE_BYTE_ORDER(s);
- s << id << bp;
- }
- rpcCall(NotifyBreakpointAdjusted, p);
-}
-
-void IPCEngineGuest::updateWatchData(bool fullCycle, const QList<WatchData> &wd)
-{
- QByteArray p;
- {
- QDataStream s(&p, QIODevice::WriteOnly);
- SET_NATIVE_BYTE_ORDER(s);
- s << fullCycle;
- s << quint64(wd.count());
- for (int i = 0; i < wd.count(); ++i)
- s << wd.at(i);
- }
- rpcCall(UpdateWatchData, p);
-}
-
-void IPCEngineGuest::frameSourceFetched(qint64 id, const QString &name, const QString &source)
-{
- QByteArray p;
- {
- QDataStream s(&p, QIODevice::WriteOnly);
- SET_NATIVE_BYTE_ORDER(s);
- s << id;
- s << name;
- s << source;
- }
- rpcCall(FrameSourceFetched, p);
-}
-
-} // namespace Internal
-} // namespace Debugger
-
-
diff --git a/src/plugins/debugger/lldblib/ipcengineguest.h b/src/plugins/debugger/lldblib/ipcengineguest.h
deleted file mode 100644
index 505328aa85..0000000000
--- a/src/plugins/debugger/lldblib/ipcengineguest.h
+++ /dev/null
@@ -1,191 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2013 Digia Plc and/or its subsidiary(-ies).
-** Contact: http://www.qt-project.org/legal
-**
-** This file is part of Qt Creator.
-**
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and Digia. For licensing terms and
-** conditions see http://qt.digia.com/licensing. For further information
-** use the contact form at http://qt.digia.com/contact-us.
-**
-** GNU Lesser General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU Lesser
-** General Public License version 2.1 as published by the Free Software
-** Foundation and appearing in the file LICENSE.LGPL included in the
-** packaging of this file. Please review the following information to
-** ensure the GNU Lesser General Public License version 2.1 requirements
-** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
-**
-** In addition, as a special exception, Digia gives you certain additional
-** rights. These rights are described in the Digia Qt LGPL Exception
-** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
-**
-****************************************************************************/
-
-#ifndef IPCENGINEGUEST_H
-#define IPCENGINEGUEST_H
-
-#include <debugger/breakhandler.h>
-#include <debugger/debuggerengine.h>
-#include <debugger/disassemblerlines.h>
-#include <debugger/stackhandler.h>
-#include <debugger/threadshandler.h>
-
-#include <QQueue>
-#include <QThread>
-#include <QVariant>
-
-namespace Debugger {
-namespace Internal {
-
-class IPCEngineHost;
-class IPCEngineGuest : public QObject
-{
- Q_OBJECT
-
-public:
- IPCEngineGuest();
- virtual ~IPCEngineGuest();
-
- void setLocalHost(IPCEngineHost *);
- void setHostDevice(QIODevice *);
-
- virtual void nuke() = 0;
- virtual void setupEngine() = 0;
- virtual void setupInferior(const QString &executeable,
- const QStringList &arguments, const QStringList &environment) = 0;
- virtual void runEngine() = 0;
- virtual void shutdownInferior() = 0;
- virtual void shutdownEngine() = 0;
- virtual void detachDebugger() = 0;
- virtual void executeStep() = 0;
- virtual void executeStepOut() = 0;
- virtual void executeNext() = 0;
- virtual void executeStepI() = 0;
- virtual void executeNextI() = 0;
- virtual void continueInferior() = 0;
- virtual void interruptInferior() = 0;
- virtual void executeRunToLine(const ContextData &data) = 0;
- virtual void executeRunToFunction(const QString &functionName) = 0;
- virtual void executeJumpToLine(const ContextData &data) = 0;
- virtual void activateFrame(qint64 token) = 0;
- virtual void selectThread(qint64 token) = 0;
- virtual void disassemble(quint64 pc) = 0;
- virtual void addBreakpoint(BreakpointModelId id, const BreakpointParameters &bp) = 0;
- virtual void removeBreakpoint(BreakpointModelId id) = 0;
- virtual void changeBreakpoint(BreakpointModelId id, const BreakpointParameters &bp) = 0;
- virtual void requestUpdateWatchData(const WatchData &data,
- const WatchUpdateFlags & flags = WatchUpdateFlags()) = 0;
- virtual void fetchFrameSource(qint64 frame) = 0;
-
- enum Function
- {
- NotifyEngineSetupOk = 1,
- NotifyEngineSetupFailed = 2,
- NotifyEngineRunFailed = 3,
- NotifyInferiorSetupOk = 4,
- NotifyInferiorSetupFailed = 5,
- NotifyEngineRunAndInferiorRunOk = 6,
- NotifyEngineRunAndInferiorStopOk = 7,
- NotifyInferiorRunRequested = 8,
- NotifyInferiorRunOk = 9,
- NotifyInferiorRunFailed = 10,
- NotifyInferiorStopOk = 11,
- NotifyInferiorSpontaneousStop = 12,
- NotifyInferiorStopFailed = 13,
- NotifyInferiorExited = 14,
- NotifyInferiorShutdownOk = 15,
- NotifyInferiorShutdownFailed = 16,
- NotifyEngineSpontaneousShutdown = 17,
- NotifyEngineShutdownOk = 18,
- NotifyEngineShutdownFailed = 19,
- NotifyInferiorIll = 20,
- NotifyEngineIll = 21,
- NotifyInferiorPid = 22,
- ShowStatusMessage = 23,
- ShowMessage = 24,
- CurrentFrameChanged = 25,
- CurrentThreadChanged = 26,
- ListFrames = 27,
- ListThreads = 28,
- Disassembled = 29,
- NotifyAddBreakpointOk = 30,
- NotifyAddBreakpointFailed = 31,
- NotifyRemoveBreakpointOk = 32,
- NotifyRemoveBreakpointFailed = 33,
- NotifyChangeBreakpointOk = 34,
- NotifyChangeBreakpointFailed = 35,
- NotifyBreakpointAdjusted = 36,
- UpdateWatchData = 47,
- FrameSourceFetched = 48
- };
- Q_ENUMS(Function)
-
- DebuggerState state() const;
- void notifyEngineSetupOk();
- void notifyEngineSetupFailed();
- void notifyEngineRunFailed();
- void notifyInferiorSetupOk();
- void notifyInferiorSetupFailed();
- void notifyEngineRunAndInferiorRunOk();
- void notifyEngineRunAndInferiorStopOk();
- void notifyInferiorRunRequested();
- void notifyInferiorRunOk();
- void notifyInferiorRunFailed();
- void notifyInferiorStopOk();
- void notifyInferiorSpontaneousStop();
- void notifyInferiorStopFailed();
- void notifyInferiorExited();
- void notifyInferiorShutdownOk();
- void notifyInferiorShutdownFailed();
- void notifyEngineSpontaneousShutdown();
- void notifyEngineShutdownOk();
- void notifyEngineShutdownFailed();
- void notifyInferiorIll();
- void notifyEngineIll();
- void notifyInferiorPid(qint64 pid);
- void showMessage(const QString &msg, quint16 channel = LogDebug, quint64 timeout = quint64(-1));
- void showStatusMessage(const QString &msg, quint64 timeout = quint64(-1));
-
- void currentFrameChanged(qint64 token);
- void currentThreadChanged(qint64 token);
- void listFrames(const StackFrames &);
- void listThreads(const Threads &);
- void disassembled(quint64 pc, const DisassemblerLines &da);
-
- void notifyAddBreakpointOk(BreakpointModelId id);
- void notifyAddBreakpointFailed(BreakpointModelId id);
- void notifyRemoveBreakpointOk(BreakpointModelId id);
- void notifyRemoveBreakpointFailed(BreakpointModelId id);
- void notifyChangeBreakpointOk(BreakpointModelId id);
- void notifyChangeBreakpointFailed(BreakpointModelId id);
- void notifyBreakpointAdjusted(BreakpointModelId id, const BreakpointParameters &bp);
-
- void updateWatchData(bool fullCycle, const QList<WatchData> &);
-
- void frameSourceFetched(qint64 frame, const QString &name, const QString &sourceCode);
-
- void rpcCall(Function f, QByteArray payload = QByteArray());
-public slots:
- void rpcCallback(quint64 f, QByteArray payload = QByteArray());
-private slots:
- void readyRead();
-private:
- IPCEngineHost *m_local_host;
- quint64 m_nextMessageCookie;
- quint64 m_nextMessageFunction;
- quint64 m_nextMessagePayloadSize;
- quint64 m_cookie;
- QIODevice *m_device;
- DebuggerState m_state;
-};
-
-} // namespace Internal
-} // namespace Debugger
-
-#endif // IPCENGINEGUEST_H
diff --git a/src/plugins/debugger/lldblib/ipcenginehost.cpp b/src/plugins/debugger/lldblib/ipcenginehost.cpp
deleted file mode 100644
index da48218ee3..0000000000
--- a/src/plugins/debugger/lldblib/ipcenginehost.cpp
+++ /dev/null
@@ -1,661 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2013 Digia Plc and/or its subsidiary(-ies).
-** Contact: http://www.qt-project.org/legal
-**
-** This file is part of Qt Creator.
-**
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and Digia. For licensing terms and
-** conditions see http://qt.digia.com/licensing. For further information
-** use the contact form at http://qt.digia.com/contact-us.
-**
-** GNU Lesser General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU Lesser
-** General Public License version 2.1 as published by the Free Software
-** Foundation and appearing in the file LICENSE.LGPL included in the
-** packaging of this file. Please review the following information to
-** ensure the GNU Lesser General Public License version 2.1 requirements
-** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
-**
-** In addition, as a special exception, Digia gives you certain additional
-** rights. These rights are described in the Digia Qt LGPL Exception
-** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
-**
-****************************************************************************/
-
-#include "ipcenginehost.h"
-
-#include "ipcengineguest.h"
-#include <debugger/debuggerstartparameters.h>
-#include <debugger/breakhandler.h>
-#include <debugger/breakpoint.h>
-#include <debugger/disassemblerlines.h>
-#include <debugger/moduleshandler.h>
-#include <debugger/registerhandler.h>
-#include <debugger/stackhandler.h>
-#include <debugger/watchhandler.h>
-#include <debugger/watchutils.h>
-#include <debugger/threadshandler.h>
-#include <debugger/disassembleragent.h>
-#include <debugger/memoryagent.h>
-#include <debugger/debuggerstreamops.h>
-#include <debugger/debuggercore.h>
-
-#include <utils/qtcassert.h>
-
-#include <QSysInfo>
-#include <QDebug>
-#include <QFileInfo>
-#include <QTimer>
-#include <QLocalSocket>
-
-#if Q_BYTE_ORDER == Q_LITTLE_ENDIAN
-#define SET_NATIVE_BYTE_ORDER(x) x.setByteOrder(QDataStream::LittleEndian)
-#else
-#define SET_NATIVE_BYTE_ORDER(x) x.setByteOrder(QDataStream::BigEndian)
-#endif
-
-namespace Debugger {
-namespace Internal {
-
-IPCEngineHost::IPCEngineHost (const DebuggerStartParameters &startParameters)
- : DebuggerEngine(startParameters)
- , m_localGuest(0)
- , m_nextMessagePayloadSize(0)
- , m_cookie(1)
- , m_device(0)
-{
- connect(this, SIGNAL(stateChanged(Debugger::DebuggerState)), SLOT(m_stateChanged(Debugger::DebuggerState)));
-}
-
-IPCEngineHost::~IPCEngineHost()
-{
- delete m_device;
-}
-
-void IPCEngineHost::setLocalGuest(IPCEngineGuest *guest)
-{
- m_localGuest = guest;
-}
-
-void IPCEngineHost::setGuestDevice(QIODevice *device)
-{
- if (m_device) {
- disconnect(m_device, SIGNAL(readyRead()), this, SLOT(readyRead()));
- delete m_device;
- }
- m_device = device;
- if (m_device)
- connect(m_device, SIGNAL(readyRead()), this, SLOT(readyRead()));
-}
-
-void IPCEngineHost::setupEngine()
-{
- QTC_ASSERT(state() == EngineSetupRequested, qDebug() << state());
- rpcCall(SetupEngine);
-}
-
-void IPCEngineHost::setupInferior()
-{
- QTC_ASSERT(state() == InferiorSetupRequested, qDebug() << state());
- QByteArray p;
- {
- QDataStream s(&p, QIODevice::WriteOnly);
- SET_NATIVE_BYTE_ORDER(s);
- s << QFileInfo(startParameters().executable).absoluteFilePath();
- s << startParameters().processArgs;
- s << startParameters().environment.toStringList();
- }
- rpcCall(SetupInferior, p);
-}
-
-void IPCEngineHost::runEngine()
-{
- QTC_ASSERT(state() == EngineRunRequested, qDebug() << state());
- rpcCall(RunEngine);
-}
-
-void IPCEngineHost::shutdownInferior()
-{
- QTC_ASSERT(state() == InferiorShutdownRequested, qDebug() << state());
- rpcCall(ShutdownInferior);
-}
-
-void IPCEngineHost::shutdownEngine()
-{
- rpcCall(ShutdownEngine);
-}
-
-void IPCEngineHost::detachDebugger()
-{
- rpcCall(DetachDebugger);
-}
-
-void IPCEngineHost::executeStep()
-{
- rpcCall(ExecuteStep);
-}
-
-void IPCEngineHost::executeStepOut()
-{
- rpcCall(ExecuteStepOut);
-}
-
-void IPCEngineHost::executeNext()
-{
- rpcCall(ExecuteNext);
-}
-
-void IPCEngineHost::executeStepI()
-{
- rpcCall(ExecuteStepI);
-}
-
-void IPCEngineHost::executeNextI()
-{
- rpcCall(ExecuteNextI);
-}
-
-void IPCEngineHost::continueInferior()
-{
- QTC_ASSERT(state() == InferiorStopOk, qDebug() << state());
- resetLocation();
- rpcCall(ContinueInferior);
-}
-
-void IPCEngineHost::interruptInferior()
-{
- QTC_ASSERT(state() == InferiorStopRequested, qDebug() << state());
- rpcCall(InterruptInferior);
-}
-
-void IPCEngineHost::executeRunToLine(const ContextData &data)
-{
- QByteArray p;
- {
- QDataStream s(&p, QIODevice::WriteOnly);
- SET_NATIVE_BYTE_ORDER(s);
- s << data.fileName;
- s << quint64(data.lineNumber);
- }
- rpcCall(ExecuteRunToLine, p);
-}
-
-void IPCEngineHost::executeRunToFunction(const QString &functionName)
-{
- QByteArray p;
- {
- QDataStream s(&p, QIODevice::WriteOnly);
- SET_NATIVE_BYTE_ORDER(s);
- s << functionName;
- }
- rpcCall(ExecuteRunToFunction, p);
-}
-
-void IPCEngineHost::executeJumpToLine(const ContextData &data)
-{
- QByteArray p;
- {
- QDataStream s(&p, QIODevice::WriteOnly);
- SET_NATIVE_BYTE_ORDER(s);
- s << data.fileName;
- s << quint64(data.lineNumber);
- }
- rpcCall(ExecuteJumpToLine, p);
-}
-
-void IPCEngineHost::activateFrame(int index)
-{
- resetLocation();
- QByteArray p;
- {
- QDataStream s(&p, QIODevice::WriteOnly);
- SET_NATIVE_BYTE_ORDER(s);
- s << quint64(index);
- }
- rpcCall(ActivateFrame, p);
-}
-
-void IPCEngineHost::selectThread(ThreadId id)
-{
- resetLocation();
- QTC_ASSERT(id.isValid(), return);
- QByteArray p;
- {
- QDataStream s(&p, QIODevice::WriteOnly);
- SET_NATIVE_BYTE_ORDER(s);
- s << id.raw();
- }
- rpcCall(SelectThread, p);
-}
-
-void IPCEngineHost::fetchDisassembler(DisassemblerAgent *v)
-{
- quint64 address = v->location().address();
- m_frameToDisassemblerAgent.insert(address, v);
- QByteArray p;
- {
- QDataStream s(&p, QIODevice::WriteOnly);
- SET_NATIVE_BYTE_ORDER(s);
- s << address;
- }
- rpcCall(Disassemble, p);
-}
-
-void IPCEngineHost::insertBreakpoint(BreakpointModelId id)
-{
- breakHandler()->notifyBreakpointInsertProceeding(id);
- QByteArray p;
- {
- QDataStream s(&p, QIODevice::WriteOnly);
- SET_NATIVE_BYTE_ORDER(s);
- s << id;
- s << breakHandler()->breakpointData(id);
- }
- rpcCall(AddBreakpoint, p);
-}
-
-void IPCEngineHost::removeBreakpoint(BreakpointModelId id)
-{
- breakHandler()->notifyBreakpointRemoveProceeding(id);
- QByteArray p;
- {
- QDataStream s(&p, QIODevice::WriteOnly);
- SET_NATIVE_BYTE_ORDER(s);
- s << id;
- }
- rpcCall(RemoveBreakpoint, p);
-}
-
-void IPCEngineHost::changeBreakpoint(BreakpointModelId id)
-{
- breakHandler()->notifyBreakpointChangeProceeding(id);
- QByteArray p;
- {
- QDataStream s(&p, QIODevice::WriteOnly);
- SET_NATIVE_BYTE_ORDER(s);
- s << id;
- s << breakHandler()->breakpointData(id);
- }
- rpcCall(RemoveBreakpoint, p);
-}
-
-void IPCEngineHost::updateWatchData(const WatchData &data,
- const WatchUpdateFlags &flags)
-{
- Q_UNUSED(flags);
- QByteArray p;
- {
- QDataStream s(&p, QIODevice::WriteOnly);
- SET_NATIVE_BYTE_ORDER(s);
- s << data;
- }
- rpcCall(RequestUpdateWatchData, p);
-}
-
-void IPCEngineHost::fetchFrameSource(qint64 id)
-{
- QByteArray p;
- {
- QDataStream s(&p, QIODevice::WriteOnly);
- SET_NATIVE_BYTE_ORDER(s);
- s << id;
- }
- rpcCall(FetchFrameSource, p);
-}
-
-void IPCEngineHost::rpcCallback(quint64 f, QByteArray payload)
-{
- switch (f) {
- default: {
- showMessage(QLatin1String("IPC Error: unhandled id in guest to host call"));
- const QString logMessage = tr("Fatal engine shutdown. Incompatible binary or IPC error.");
- showMessage(logMessage, LogError);
- showStatusMessage(logMessage);
- }
- nuke();
- break;
- case IPCEngineGuest::NotifyEngineSetupOk:
- notifyEngineSetupOk();
- break;
- case IPCEngineGuest::NotifyEngineSetupFailed:
- notifyEngineSetupFailed();
- break;
- case IPCEngineGuest::NotifyEngineRunFailed:
- notifyEngineRunFailed();
- break;
- case IPCEngineGuest::NotifyInferiorSetupOk:
- attemptBreakpointSynchronization();
- notifyInferiorSetupOk();
- break;
- case IPCEngineGuest::NotifyInferiorSetupFailed:
- notifyInferiorSetupFailed();
- break;
- case IPCEngineGuest::NotifyEngineRunAndInferiorRunOk:
- notifyEngineRunAndInferiorRunOk();
- break;
- case IPCEngineGuest::NotifyEngineRunAndInferiorStopOk:
- notifyEngineRunAndInferiorStopOk();
- break;
- case IPCEngineGuest::NotifyInferiorRunRequested:
- notifyInferiorRunRequested();
- break;
- case IPCEngineGuest::NotifyInferiorRunOk:
- notifyInferiorRunOk();
- break;
- case IPCEngineGuest::NotifyInferiorRunFailed:
- notifyInferiorRunFailed();
- break;
- case IPCEngineGuest::NotifyInferiorStopOk:
- notifyInferiorStopOk();
- break;
- case IPCEngineGuest::NotifyInferiorSpontaneousStop:
- notifyInferiorSpontaneousStop();
- break;
- case IPCEngineGuest::NotifyInferiorStopFailed:
- notifyInferiorStopFailed();
- break;
- case IPCEngineGuest::NotifyInferiorExited:
- notifyInferiorExited();
- break;
- case IPCEngineGuest::NotifyInferiorShutdownOk:
- notifyInferiorShutdownOk();
- break;
- case IPCEngineGuest::NotifyInferiorShutdownFailed:
- notifyInferiorShutdownFailed();
- break;
- case IPCEngineGuest::NotifyEngineSpontaneousShutdown:
- notifyEngineSpontaneousShutdown();
- break;
- case IPCEngineGuest::NotifyEngineShutdownOk:
- notifyEngineShutdownOk();
- break;
- case IPCEngineGuest::NotifyEngineShutdownFailed:
- notifyEngineShutdownFailed();
- break;
- case IPCEngineGuest::NotifyInferiorIll:
- notifyInferiorIll();
- break;
- case IPCEngineGuest::NotifyEngineIll:
- notifyEngineIll();
- break;
- case IPCEngineGuest::NotifyInferiorPid:
- {
- QDataStream s(payload);
- SET_NATIVE_BYTE_ORDER(s);
- quint64 pid;
- s >> pid;
- notifyInferiorPid(pid);
- }
- break;
- case IPCEngineGuest::ShowStatusMessage:
- {
- QDataStream s(payload);
- SET_NATIVE_BYTE_ORDER(s);
- QString msg;
- qint64 timeout;
- s >> msg;
- s >> timeout;
- showStatusMessage(msg, timeout);
- }
- break;
- case IPCEngineGuest::ShowMessage:
- {
- QDataStream s(payload);
- SET_NATIVE_BYTE_ORDER(s);
- QString msg;
- qint16 channel;
- qint64 timeout;
- s >> msg;
- s >> channel;
- s >> timeout;
- showMessage(msg, channel, timeout);
- }
- break;
- case IPCEngineGuest::CurrentFrameChanged:
- {
- QDataStream s(payload);
- SET_NATIVE_BYTE_ORDER(s);
- quint64 token;
- s >> token;
-
- resetLocation();
- StackHandler *sh = stackHandler();
- sh->setCurrentIndex(token);
- if (!sh->currentFrame().isUsable() || QFileInfo(sh->currentFrame().file).exists())
- gotoLocation(Location(sh->currentFrame(), true));
- else if (!m_sourceAgents.contains(sh->currentFrame().file))
- fetchFrameSource(token);
- foreach (SourceAgent *agent, m_sourceAgents.values())
- agent->updateLocationMarker();
- }
- break;
- case IPCEngineGuest::CurrentThreadChanged:
- {
- QDataStream s(payload);
- SET_NATIVE_BYTE_ORDER(s);
- quint64 token;
- s >> token;
- threadsHandler()->setCurrentThread(ThreadId(token));
- }
- break;
- case IPCEngineGuest::ListFrames:
- {
- QDataStream s(payload);
- SET_NATIVE_BYTE_ORDER(s);
- StackFrames frames;
- s >> frames;
- stackHandler()->setFrames(frames);
- }
- break;
- case IPCEngineGuest::ListThreads:
- {
- QDataStream s(payload);
- SET_NATIVE_BYTE_ORDER(s);
- Threads threads;
- s >> threads;
- threadsHandler()->setThreads(threads);
- }
- break;
- case IPCEngineGuest::Disassembled:
- {
- QDataStream s(payload);
- SET_NATIVE_BYTE_ORDER(s);
- quint64 pc;
- DisassemblerLines lines;
- s >> pc;
- s >> lines;
- DisassemblerAgent *view = m_frameToDisassemblerAgent.take(pc);
- if (view)
- view->setContents(lines);
- }
- break;
- case IPCEngineGuest::UpdateWatchData:
- {
- QDataStream s(payload);
- SET_NATIVE_BYTE_ORDER(s);
- bool fullCycle;
- qint64 count;
- QList<WatchData> wd;
- s >> fullCycle;
- s >> count;
- for (qint64 i = 0; i < count; ++i) {
- WatchData d;
- s >> d;
- wd.append(d);
- }
- WatchHandler *wh = watchHandler();
- if (!wh)
- break;
- wh->insertData(wd);
- }
- break;
- case IPCEngineGuest::NotifyAddBreakpointOk:
- {
- attemptBreakpointSynchronization();
- QDataStream s(payload);
- SET_NATIVE_BYTE_ORDER(s);
- quint64 d;
- s >> d;
- BreakpointModelId id = BreakpointModelId::fromInternalId(d);
- breakHandler()->notifyBreakpointInsertOk(id);
- }
- break;
- case IPCEngineGuest::NotifyAddBreakpointFailed:
- {
- QDataStream s(payload);
- SET_NATIVE_BYTE_ORDER(s);
- quint64 d;
- s >> d;
- BreakpointModelId id = BreakpointModelId::fromInternalId(d);
- breakHandler()->notifyBreakpointInsertFailed(id);
- }
- break;
- case IPCEngineGuest::NotifyRemoveBreakpointOk:
- {
- QDataStream s(payload);
- SET_NATIVE_BYTE_ORDER(s);
- quint64 d;
- s >> d;
- BreakpointModelId id = BreakpointModelId::fromInternalId(d);
- breakHandler()->notifyBreakpointRemoveOk(id);
- }
- break;
- case IPCEngineGuest::NotifyRemoveBreakpointFailed:
- {
- QDataStream s(payload);
- SET_NATIVE_BYTE_ORDER(s);
- quint64 d;
- s >> d;
- BreakpointModelId id = BreakpointModelId::fromInternalId(d);
- breakHandler()->notifyBreakpointRemoveFailed(id);
- }
- break;
- case IPCEngineGuest::NotifyChangeBreakpointOk:
- {
- QDataStream s(payload);
- SET_NATIVE_BYTE_ORDER(s);
- quint64 d;
- s >> d;
- BreakpointModelId id = BreakpointModelId::fromInternalId(d);
- breakHandler()->notifyBreakpointChangeOk(id);
- }
- break;
- case IPCEngineGuest::NotifyChangeBreakpointFailed:
- {
- QDataStream s(payload);
- SET_NATIVE_BYTE_ORDER(s);
- quint64 d;
- s >> d;
- BreakpointModelId id = BreakpointModelId::fromInternalId(d);
- breakHandler()->notifyBreakpointChangeFailed(id);
- }
- break;
- case IPCEngineGuest::NotifyBreakpointAdjusted:
- {
- QDataStream s(payload);
- SET_NATIVE_BYTE_ORDER(s);
- quint64 dd;
- BreakpointParameters d;
- s >> dd >> d;
- BreakpointModelId id = BreakpointModelId::fromInternalId(dd);
- breakHandler()->notifyBreakpointAdjusted(id, d);
- }
- break;
- case IPCEngineGuest::FrameSourceFetched:
- {
- QDataStream s(payload);
- SET_NATIVE_BYTE_ORDER(s);
- qint64 token;
- QString path;
- QString source;
- s >> token >> path >> source;
- SourceAgent *agent = new SourceAgent(this);
- agent->setSourceProducerName(startParameters().connParams.host);
- agent->setContent(path, source);
- m_sourceAgents.insert(path, agent);
- agent->updateLocationMarker();
- }
- break;
- }
-}
-
-void IPCEngineHost::m_stateChanged(Debugger::DebuggerState state)
-{
- QByteArray p;
- {
- QDataStream s(&p, QIODevice::WriteOnly);
- SET_NATIVE_BYTE_ORDER(s);
- s << (qint64)state;
- }
- rpcCall(StateChanged, p);
-
-}
-
-void IPCEngineHost::rpcCall(Function f, QByteArray payload)
-{
- if (m_localGuest) {
- QMetaObject::invokeMethod(m_localGuest,
- "rpcCallback",
- Qt::QueuedConnection,
- Q_ARG(quint64, f),
- Q_ARG(QByteArray, payload));
- } else if (m_device) {
- QByteArray header;
- {
- QDataStream s(&header, QIODevice::WriteOnly);
- SET_NATIVE_BYTE_ORDER(s);
- s << m_cookie++;
- s << (quint64) f;
- s << (quint64) payload.size();
- }
- m_device->write(header);
- m_device->write(payload);
- m_device->putChar('T');
- QLocalSocket *sock = qobject_cast<QLocalSocket *>(m_device);
- if (sock)
- sock->flush();
- }
-}
-
-void IPCEngineHost::readyRead()
-{
- QDataStream s(m_device);
- SET_NATIVE_BYTE_ORDER(s);
- if (!m_nextMessagePayloadSize) {
- if (quint64(m_device->bytesAvailable ()) < 3 * sizeof(quint64))
- return;
- s >> m_nextMessageCookie;
- s >> m_nextMessageFunction;
- s >> m_nextMessagePayloadSize;
- m_nextMessagePayloadSize += 1; // Terminator and "got header" marker.
- }
-
- quint64 ba = m_device->bytesAvailable();
- if (ba < m_nextMessagePayloadSize)
- return;
-
- QByteArray payload = m_device->read(m_nextMessagePayloadSize - 1);
-
- char terminator;
- m_device->getChar(&terminator);
- if (terminator != 'T') {
- showStatusMessage(tr("Fatal engine shutdown. Incompatible binary or IPC error."));
- showMessage(QLatin1String("IPC Error: terminator missing"));
- nuke();
- return;
- }
- rpcCallback(m_nextMessageFunction, payload);
- m_nextMessagePayloadSize = 0;
- if (quint64(m_device->bytesAvailable()) >= 3 * sizeof(quint64))
- QTimer::singleShot(0, this, SLOT(readyRead()));
-}
-
-} // namespace Internal
-} // namespace Debugger
-
-
diff --git a/src/plugins/debugger/lldblib/ipcenginehost.h b/src/plugins/debugger/lldblib/ipcenginehost.h
deleted file mode 100644
index 92f847ca44..0000000000
--- a/src/plugins/debugger/lldblib/ipcenginehost.h
+++ /dev/null
@@ -1,140 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2013 Digia Plc and/or its subsidiary(-ies).
-** Contact: http://www.qt-project.org/legal
-**
-** This file is part of Qt Creator.
-**
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and Digia. For licensing terms and
-** conditions see http://qt.digia.com/licensing. For further information
-** use the contact form at http://qt.digia.com/contact-us.
-**
-** GNU Lesser General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU Lesser
-** General Public License version 2.1 as published by the Free Software
-** Foundation and appearing in the file LICENSE.LGPL included in the
-** packaging of this file. Please review the following information to
-** ensure the GNU Lesser General Public License version 2.1 requirements
-** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
-**
-** In addition, as a special exception, Digia gives you certain additional
-** rights. These rights are described in the Digia Qt LGPL Exception
-** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
-**
-****************************************************************************/
-
-#ifndef DEBUGGER_IPCENGINE_HOST_H
-#define DEBUGGER_IPCENGINE_HOST_H
-
-#include <debugger/debuggerengine.h>
-#include <debugger/threadshandler.h>
-#include <debugger/stackhandler.h>
-#include <debugger/breakhandler.h>
-#include <debugger/sourceagent.h>
-
-#include <QQueue>
-#include <QVariant>
-#include <QThread>
-
-namespace Debugger {
-namespace Internal {
-
-class IPCEngineGuest;
-class IPCEngineHost : public DebuggerEngine
-{
- Q_OBJECT
-
-public:
- explicit IPCEngineHost(const DebuggerStartParameters &startParameters);
- ~IPCEngineHost();
-
- // use either one
- void setLocalGuest(IPCEngineGuest *);
- void setGuestDevice(QIODevice *);
-
- enum Function
- {
- SetupIPC = 1,
- StateChanged = 2,
- SetupEngine = 3,
- SetupInferior = 4,
- RunEngine = 5,
- ShutdownInferior = 6,
- ShutdownEngine = 7,
- DetachDebugger = 8,
- ExecuteStep = 9,
- ExecuteStepOut = 10,
- ExecuteNext = 11,
- ExecuteStepI = 12,
- ExecuteNextI = 13,
- ContinueInferior = 14,
- InterruptInferior = 15,
- ExecuteRunToLine = 16,
- ExecuteRunToFunction = 17,
- ExecuteJumpToLine = 18,
- ActivateFrame = 19,
- SelectThread = 20,
- Disassemble = 21,
- AddBreakpoint = 22,
- RemoveBreakpoint = 23,
- ChangeBreakpoint = 24,
- RequestUpdateWatchData = 25,
- FetchFrameSource = 26
- };
- Q_ENUMS(Function)
-
- void setupEngine();
- void setupInferior();
- void runEngine();
- void shutdownInferior();
- void shutdownEngine();
- void detachDebugger();
- void executeStep();
- void executeStepOut() ;
- void executeNext();
- void executeStepI();
- void executeNextI();
- void continueInferior();
- void interruptInferior();
- void executeRunToLine(const ContextData &data);
- void executeRunToFunction(const QString &functionName);
- void executeJumpToLine(const ContextData &data);
- void activateFrame(int index);
- void selectThread(ThreadId index);
- void fetchDisassembler(DisassemblerAgent *);
- bool acceptsBreakpoint(BreakpointModelId) const { return true; } // FIXME
- void insertBreakpoint(BreakpointModelId id);
- void removeBreakpoint(BreakpointModelId id);
- void changeBreakpoint(BreakpointModelId id);
- void updateWatchData(const WatchData &data,
- const WatchUpdateFlags &flags = WatchUpdateFlags());
- void fetchFrameSource(qint64 id);
- bool hasCapability(unsigned) const { return false; }
-
- void rpcCall(Function f, QByteArray payload = QByteArray());
-protected:
- virtual void nuke() = 0;
-public slots:
- void rpcCallback(quint64 f, QByteArray payload = QByteArray());
-private slots:
- void m_stateChanged(Debugger::DebuggerState state);
- void readyRead();
-private:
- IPCEngineGuest *m_localGuest;
- quint64 m_nextMessageCookie;
- quint64 m_nextMessageFunction;
- quint64 m_nextMessagePayloadSize;
- quint64 m_cookie;
- QIODevice *m_device;
- QHash<quint64, DisassemblerAgent *> m_frameToDisassemblerAgent;
- QHash<QString, SourceAgent *> m_sourceAgents;
-};
-
-} // namespace Internal
-} // namespace Debugger
-
-#endif // DEBUGGER_LLDBENGINE_H
diff --git a/src/plugins/debugger/lldblib/lldbenginehost.cpp b/src/plugins/debugger/lldblib/lldbenginehost.cpp
deleted file mode 100644
index 538ba66e12..0000000000
--- a/src/plugins/debugger/lldblib/lldbenginehost.cpp
+++ /dev/null
@@ -1,232 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2013 Digia Plc and/or its subsidiary(-ies).
-** Contact: http://www.qt-project.org/legal
-**
-** This file is part of Qt Creator.
-**
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and Digia. For licensing terms and
-** conditions see http://qt.digia.com/licensing. For further information
-** use the contact form at http://qt.digia.com/contact-us.
-**
-** GNU Lesser General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU Lesser
-** General Public License version 2.1 as published by the Free Software
-** Foundation and appearing in the file LICENSE.LGPL included in the
-** packaging of this file. Please review the following information to
-** ensure the GNU Lesser General Public License version 2.1 requirements
-** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
-**
-** In addition, as a special exception, Digia gives you certain additional
-** rights. These rights are described in the Digia Qt LGPL Exception
-** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
-**
-****************************************************************************/
-
-#include "lldbenginehost.h"
-
-#include <debugger/debuggerstartparameters.h>
-#include <debugger/debuggeractions.h>
-#include <debugger/debuggerconstants.h>
-#include <debugger/debuggerdialogs.h>
-#include <debugger/debuggerplugin.h>
-#include <debugger/debuggerstringutils.h>
-
-#include <debugger/breakhandler.h>
-#include <debugger/breakpoint.h>
-#include <debugger/moduleshandler.h>
-#include <debugger/registerhandler.h>
-#include <debugger/stackhandler.h>
-#include <debugger/watchhandler.h>
-#include <debugger/watchutils.h>
-#include <debugger/threadshandler.h>
-#include <debugger/disassembleragent.h>
-#include <debugger/memoryagent.h>
-
-#include <coreplugin/icore.h>
-#include <utils/qtcassert.h>
-
-#include <QDebug>
-#include <QProcess>
-#include <QFileInfo>
-#include <QThread>
-#include <QCoreApplication>
-
-namespace Debugger {
-namespace Internal {
-
-SshIODevice::SshIODevice(QSsh::SshRemoteProcessRunner *r)
- : runner(r)
- , buckethead(0)
-{
- setOpenMode(QIODevice::ReadWrite | QIODevice::Unbuffered);
- connect (runner, SIGNAL(processStarted()), this, SLOT(processStarted()));
- connect(runner, SIGNAL(readyReadStandardOutput()), this, SLOT(outputAvailable()));
- connect(runner, SIGNAL(readyReadStandardError()), this, SLOT(errorOutputAvailable()));
-}
-
-SshIODevice::~SshIODevice()
-{
- delete runner;
-}
-
-qint64 SshIODevice::bytesAvailable () const
-{
- qint64 r = QIODevice::bytesAvailable();
- foreach (const QByteArray &bucket, buckets)
- r += bucket.size();
- r-= buckethead;
- return r;
-}
-qint64 SshIODevice::writeData (const char * data, qint64 maxSize)
-{
- if (proc == 0) {
- startupbuffer += QByteArray::fromRawData(data, maxSize);
- return maxSize;
- }
- proc->write(data, maxSize);
- return maxSize;
-}
-qint64 SshIODevice::readData (char * data, qint64 maxSize)
-{
- if (proc == 0)
- return 0;
- qint64 size = maxSize;
- while (size > 0) {
- if (!buckets.size())
- return maxSize - size;
- QByteArray &bucket = buckets.head();
- if ((size + buckethead) >= bucket.size()) {
- int d = bucket.size() - buckethead;
- memcpy(data, bucket.data() + buckethead, d);
- data += d;
- size -= d;
- buckets.dequeue();
- buckethead = 0;
- } else {
- memcpy(data, bucket.data() + buckethead, size);
- data += size;
- buckethead += size;
- size = 0;
- }
- }
- return maxSize - size;
-}
-
-void SshIODevice::processStarted()
-{
- runner->writeDataToProcess(startupbuffer);
-}
-
-void SshIODevice::outputAvailable()
-{
- buckets.enqueue(runner->readAllStandardOutput());
- emit readyRead();
-}
-
-void SshIODevice::errorOutputAvailable()
-{
- fprintf(stderr, "%s", runner->readAllStandardError().data());
-}
-
-
-LldbEngineHost::LldbEngineHost(const DebuggerStartParameters &startParameters)
- :IPCEngineHost(startParameters), m_ssh(0)
-{
- showMessage(QLatin1String("setting up coms"));
- setObjectName(QLatin1String("LLDBEngine"));
-
- if (startParameters.startMode == StartRemoteEngine)
- {
- m_guestProcess = 0;
- QSsh::SshRemoteProcessRunner * const runner = new QSsh::SshRemoteProcessRunner;
- connect (runner, SIGNAL(connectionError(QSsh::SshError)),
- this, SLOT(sshConnectionError(QSsh::SshError)));
- runner->run(startParameters.serverStartScript.toUtf8(), startParameters.connParams);
- setGuestDevice(new SshIODevice(runner));
- } else {
- m_guestProcess = new QProcess(this);
-
- connect(m_guestProcess, SIGNAL(finished(int,QProcess::ExitStatus)),
- this, SLOT(finished(int,QProcess::ExitStatus)));
-
- connect(m_guestProcess, SIGNAL(readyReadStandardError()), this,
- SLOT(stderrReady()));
-
-
- QString a = Core::ICore::resourcePath() + QLatin1String("/qtcreator-lldb");
- if (getenv("QTC_LLDB_GUEST") != 0)
- a = QString::fromLocal8Bit(getenv("QTC_LLDB_GUEST"));
-
- showStatusMessage(QString(QLatin1String("starting %1")).arg(a));
-
- m_guestProcess->start(a, QStringList(), QIODevice::ReadWrite | QIODevice::Unbuffered);
- m_guestProcess->setReadChannel(QProcess::StandardOutput);
-
- if (!m_guestProcess->waitForStarted()) {
- showStatusMessage(tr("qtcreator-lldb failed to start: %1").arg(m_guestProcess->errorString()));
- notifyEngineSpontaneousShutdown();
- return;
- }
-
- setGuestDevice(m_guestProcess);
- }
-}
-
-LldbEngineHost::~LldbEngineHost()
-{
- showMessage(QLatin1String("tear down qtcreator-lldb"));
-
- if (m_guestProcess) {
- disconnect(m_guestProcess, SIGNAL(finished(int,QProcess::ExitStatus)),
- this, SLOT(finished(int,QProcess::ExitStatus)));
-
-
- m_guestProcess->terminate();
- m_guestProcess->kill();
- }
- if (m_ssh && m_ssh->isProcessRunning()) {
- // TODO: openssh doesn't do that
-
- m_ssh->sendSignalToProcess(QSsh::SshRemoteProcess::KillSignal);
- }
-}
-
-void LldbEngineHost::nuke()
-{
- stderrReady();
- showMessage(QLatin1String("Nuke engaged. Bug in Engine/IPC or incompatible IPC versions. "), LogError);
- showStatusMessage(tr("Fatal engine shutdown. Consult debugger log for details."));
- m_guestProcess->terminate();
- m_guestProcess->kill();
- notifyEngineSpontaneousShutdown();
-}
-void LldbEngineHost::sshConnectionError(QSsh::SshError e)
-{
- showStatusMessage(tr("SSH connection error: %1").arg(e));
-}
-
-void LldbEngineHost::finished(int, QProcess::ExitStatus status)
-{
- showMessage(QString(QLatin1String("guest went bye bye. exit status: %1 and code: %2"))
- .arg(status).arg(m_guestProcess->exitCode()), LogError);
- nuke();
-}
-
-void LldbEngineHost::stderrReady()
-{
- fprintf(stderr,"%s", m_guestProcess->readAllStandardError().data());
-}
-
-DebuggerEngine *createLldbLibEngine(const DebuggerStartParameters &startParameters)
-{
- return new LldbEngineHost(startParameters);
-}
-
-} // namespace Internal
-} // namespace Debugger
-
diff --git a/src/plugins/debugger/lldblib/lldbenginehost.h b/src/plugins/debugger/lldblib/lldbenginehost.h
deleted file mode 100644
index 52df2b373e..0000000000
--- a/src/plugins/debugger/lldblib/lldbenginehost.h
+++ /dev/null
@@ -1,88 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2013 Digia Plc and/or its subsidiary(-ies).
-** Contact: http://www.qt-project.org/legal
-**
-** This file is part of Qt Creator.
-**
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and Digia. For licensing terms and
-** conditions see http://qt.digia.com/licensing. For further information
-** use the contact form at http://qt.digia.com/contact-us.
-**
-** GNU Lesser General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU Lesser
-** General Public License version 2.1 as published by the Free Software
-** Foundation and appearing in the file LICENSE.LGPL included in the
-** packaging of this file. Please review the following information to
-** ensure the GNU Lesser General Public License version 2.1 requirements
-** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
-**
-** In addition, as a special exception, Digia gives you certain additional
-** rights. These rights are described in the Digia Qt LGPL Exception
-** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
-**
-****************************************************************************/
-
-#ifndef DEBUGGER_LLDBENGINE_HOST_H
-#define DEBUGGER_LLDBENGINE_HOST_H
-
-#include "ipcenginehost.h"
-#include <ssh/ssherrors.h>
-#include <ssh/sshconnection.h>
-#include <ssh/sshremoteprocess.h>
-#include <ssh/sshremoteprocessrunner.h>
-
-#include <QProcess>
-#include <QQueue>
-
-namespace Debugger {
-namespace Internal {
-
-class SshIODevice : public QIODevice
-{
-Q_OBJECT
-public:
- SshIODevice(QSsh::SshRemoteProcessRunner *r);
- ~SshIODevice();
- virtual qint64 bytesAvailable () const;
- virtual qint64 writeData (const char * data, qint64 maxSize);
- virtual qint64 readData (char * data, qint64 maxSize);
-private slots:
- void processStarted();
- void outputAvailable();
- void errorOutputAvailable();
-private:
- QSsh::SshRemoteProcessRunner *runner;
- QSsh::SshRemoteProcess::Ptr proc;
- int buckethead;
- QQueue<QByteArray> buckets;
- QByteArray startupbuffer;
-};
-
-class LldbEngineHost : public IPCEngineHost
-{
- Q_OBJECT
-
-public:
- explicit LldbEngineHost(const DebuggerStartParameters &startParameters);
- ~LldbEngineHost();
-
-private:
- QProcess *m_guestProcess;
- QSsh::SshRemoteProcessRunner *m_ssh;
-protected:
- void nuke();
-private slots:
- void sshConnectionError(QSsh::SshError);
- void finished(int, QProcess::ExitStatus);
- void stderrReady();
-};
-
-} // namespace Internal
-} // namespace Debugger
-
-#endif // DEBUGGER_LLDBENGINE_HOST_H
diff --git a/src/plugins/debugger/lldblib/lldbhost.pri b/src/plugins/debugger/lldblib/lldbhost.pri
deleted file mode 100644
index 0e9297d7e3..0000000000
--- a/src/plugins/debugger/lldblib/lldbhost.pri
+++ /dev/null
@@ -1,20 +0,0 @@
-WITH_LLDB = $$(WITH_LLDB)
-
-HEADERS += $$PWD/ipcenginehost.h \
- $$PWD/lldbenginehost.h
-
-SOURCES += $$PWD/ipcenginehost.cpp \
- $$PWD/lldbenginehost.cpp
-
-INCLUDEPATH+=
-
-FORMS +=
-
-RESOURCES +=
-
-!isEmpty(WITH_LLDB) {
- DEFINES += WITH_LLDB
- HEADERS += $$PWD/lldboptionspage.h
- SOURCES += $$PWD/lldboptionspage.cpp
- FORMS += $$PWD/lldboptionspagewidget.ui
-}
diff --git a/src/plugins/debugger/lldblib/lldboptionspage.cpp b/src/plugins/debugger/lldblib/lldboptionspage.cpp
deleted file mode 100644
index 5ce79b33ad..0000000000
--- a/src/plugins/debugger/lldblib/lldboptionspage.cpp
+++ /dev/null
@@ -1,109 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2013 Digia Plc and/or its subsidiary(-ies).
-** Contact: http://www.qt-project.org/legal
-**
-** This file is part of Qt Creator.
-**
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and Digia. For licensing terms and
-** conditions see http://qt.digia.com/licensing. For further information
-** use the contact form at http://qt.digia.com/contact-us.
-**
-** GNU Lesser General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU Lesser
-** General Public License version 2.1 as published by the Free Software
-** Foundation and appearing in the file LICENSE.LGPL included in the
-** packaging of this file. Please review the following information to
-** ensure the GNU Lesser General Public License version 2.1 requirements
-** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
-**
-** In addition, as a special exception, Digia gives you certain additional
-** rights. These rights are described in the Digia Qt LGPL Exception
-** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
-**
-****************************************************************************/
-
-#include "lldboptionspage.h"
-#include <debugger/debuggerconstants.h>
-#include <debugger/debuggerinternalconstants.h>
-
-#include <coreplugin/icore.h>
-
-#include <QCoreApplication>
-#include <QUrl>
-#include <QTextStream>
-#include <QMessageBox>
-#include <QDesktopServices>
-
-namespace Debugger {
-namespace Internal {
-
-LldbOptionsPageWidget::LldbOptionsPageWidget(QWidget *parent, QSettings *s_)
- : QWidget(parent)
- , s(s_)
-{
- m_ui.setupUi(this);
- load();
-}
-
-void LldbOptionsPageWidget::save()
-{
- s->beginGroup(QLatin1String("LLDB"));
- s->setValue(QLatin1String("enabled"), m_ui.enableLldb->isChecked ());
- s->setValue(QLatin1String("gdbEmu"), m_ui.gdbEmu->isChecked ());
- s->endGroup();
-}
-
-void LldbOptionsPageWidget::load()
-{
- s->beginGroup(QLatin1String("LLDB"));
- m_ui.enableLldb->setChecked(s->value(QLatin1String("enabled"), false).toBool());
- m_ui.gdbEmu->setChecked(s->value(QLatin1String("gdbEmu"), true).toBool());
- s->endGroup();
-}
-
-// ---------- LldbOptionsPage
-LldbOptionsPage::LldbOptionsPage()
-{
- // m_options->fromSettings(Core::ICore::settings());
- setId("F.Lldb");
- setDisplayName(tr("LLDB"));
- setCategory(Debugger::Constants::DEBUGGER_SETTINGS_CATEGORY);
- setDisplayCategory(QCoreApplication::translate("Debugger", Constants::DEBUGGER_SETTINGS_TR_CATEGORY));
- setCategoryIcon(QLatin1String(Constants::DEBUGGER_COMMON_SETTINGS_CATEGORY_ICON));
-}
-
-QWidget *LldbOptionsPage::createPage(QWidget *parent)
-{
- m_widget = new LldbOptionsPageWidget(parent, Core::ICore::settings());
- return m_widget;
-}
-
-void LldbOptionsPage::apply()
-{
- if (!m_widget)
- return;
- m_widget->save();
-}
-
-void LldbOptionsPage::finish()
-{
-}
-
-bool LldbOptionsPage::matches(const QString &s) const
-{
- return QString(s.toLower()).contains(QLatin1String("lldb"));
-}
-
-void addLldbOptionPages(QList<Core::IOptionsPage *> *opts)
-{
- opts->push_back(new LldbOptionsPage);
-}
-
-
-} // namespace Internal
-} // namespace Debugger
diff --git a/src/plugins/debugger/lldblib/lldboptionspage.h b/src/plugins/debugger/lldblib/lldboptionspage.h
deleted file mode 100644
index 81ebfaf28c..0000000000
--- a/src/plugins/debugger/lldblib/lldboptionspage.h
+++ /dev/null
@@ -1,80 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2013 Digia Plc and/or its subsidiary(-ies).
-** Contact: http://www.qt-project.org/legal
-**
-** This file is part of Qt Creator.
-**
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and Digia. For licensing terms and
-** conditions see http://qt.digia.com/licensing. For further information
-** use the contact form at http://qt.digia.com/contact-us.
-**
-** GNU Lesser General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU Lesser
-** General Public License version 2.1 as published by the Free Software
-** Foundation and appearing in the file LICENSE.LGPL included in the
-** packaging of this file. Please review the following information to
-** ensure the GNU Lesser General Public License version 2.1 requirements
-** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
-**
-** In addition, as a special exception, Digia gives you certain additional
-** rights. These rights are described in the Digia Qt LGPL Exception
-** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
-**
-****************************************************************************/
-
-#ifndef LLDBOPTIONSPAGE_H
-#define LLDBOPTIONSPAGE_H
-
-#include <coreplugin/dialogs/ioptionspage.h>
-#include "ui_lldboptionspagewidget.h"
-
-#include <QWidget>
-#include <QPointer>
-#include <QSharedPointer>
-#include <QSettings>
-
-namespace Debugger {
-namespace Internal {
-
-class LldbOptionsPageWidget : public QWidget
-{
- Q_OBJECT
-
-public:
- explicit LldbOptionsPageWidget(QWidget *parent, QSettings *s);
-
-public slots:
- void save();
- void load();
-
-private:
- Ui::LldbOptionsPageWidget m_ui;
- QSettings *s;
-};
-
-class LldbOptionsPage : public Core::IOptionsPage
-{
- Q_OBJECT
-
-public:
- LldbOptionsPage();
-
- // IOptionsPage
- QWidget *createPage(QWidget *parent);
- void apply();
- void finish();
- bool matches(const QString &) const;
-
-private:
- QPointer<LldbOptionsPageWidget> m_widget;
-};
-
-} // namespace Internal
-} // namespace Debugger
-
-#endif // LLDBOPTIONSPAGE_H
diff --git a/src/plugins/debugger/lldblib/lldboptionspagewidget.ui b/src/plugins/debugger/lldblib/lldboptionspagewidget.ui
deleted file mode 100644
index 78e77699f0..0000000000
--- a/src/plugins/debugger/lldblib/lldboptionspagewidget.ui
+++ /dev/null
@@ -1,59 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<ui version="4.0">
- <class>Debugger::Internal::LldbOptionsPageWidget</class>
- <widget class="QWidget" name="Debugger::Internal::LldbOptionsPageWidget">
- <property name="geometry">
- <rect>
- <x>0</x>
- <y>0</y>
- <width>522</width>
- <height>512</height>
- </rect>
- </property>
- <layout class="QVBoxLayout" name="verticalLayout">
- <item>
- <layout class="QHBoxLayout" name="horizontalLayout"/>
- </item>
- <item>
- <widget class="QGroupBox" name="enableLldb">
- <property name="title">
- <string>Enable LLDB</string>
- </property>
- <property name="checkable">
- <bool>true</bool>
- </property>
- <property name="checked">
- <bool>false</bool>
- </property>
- <layout class="QVBoxLayout" name="verticalLayout_2">
- <item>
- <widget class="QCheckBox" name="gdbEmu">
- <property name="text">
- <string>Use GDB Python dumpers</string>
- </property>
- <property name="checked">
- <bool>false</bool>
- </property>
- </widget>
- </item>
- </layout>
- </widget>
- </item>
- <item>
- <spacer name="verticalSpacer">
- <property name="orientation">
- <enum>Qt::Vertical</enum>
- </property>
- <property name="sizeHint" stdset="0">
- <size>
- <width>20</width>
- <height>203</height>
- </size>
- </property>
- </spacer>
- </item>
- </layout>
- </widget>
- <resources/>
- <connections/>
-</ui>
diff --git a/src/plugins/debugger/localsandexpressionsoptionspage.ui b/src/plugins/debugger/localsandexpressionsoptionspage.ui
index ce60b3dfbd..d2b320ddaa 100644
--- a/src/plugins/debugger/localsandexpressionsoptionspage.ui
+++ b/src/plugins/debugger/localsandexpressionsoptionspage.ui
@@ -60,7 +60,7 @@
<item>
<widget class="QCheckBox" name="checkBoxShowStdNamespace">
<property name="toolTip">
- <string>Show 'std::' prefix for types from the standard library.</string>
+ <string>Shows 'std::' prefix for types from the standard library.</string>
</property>
<property name="text">
<string>Show &quot;std::&quot; namespace for types</string>
@@ -70,7 +70,7 @@
<item>
<widget class="QCheckBox" name="checkBoxShowQtNamespace">
<property name="toolTip">
- <string>Show Qt namespace prefix for Qt types. This is only relevant if Qt was configured with '-qtnamespace'.</string>
+ <string>Shows Qt namespace prefix for Qt types. This is only relevant if Qt was configured with '-qtnamespace'.</string>
</property>
<property name="text">
<string>Show Qt's namespace for types</string>
diff --git a/src/plugins/debugger/sourceagent.cpp b/src/plugins/debugger/sourceagent.cpp
index 210528bf13..d944a20b1c 100644
--- a/src/plugins/debugger/sourceagent.cpp
+++ b/src/plugins/debugger/sourceagent.cpp
@@ -137,7 +137,7 @@ void SourceAgent::updateLocationMarker()
QTC_ASSERT(d->editor, return);
if (d->locationMark)
- d->editor->markableInterface()->removeMark(d->locationMark);
+ d->editor->textDocument()->markableInterface()->removeMark(d->locationMark);
delete d->locationMark;
d->locationMark = 0;
if (d->engine->stackHandler()->currentFrame().file == d->path) {
@@ -145,7 +145,7 @@ void SourceAgent::updateLocationMarker()
d->locationMark = new TextEditor::ITextMark(lineNumber);
d->locationMark->setIcon(debuggerCore()->locationMarkIcon());
d->locationMark->setPriority(TextEditor::ITextMark::HighPriority);
- d->editor->markableInterface()->addMark(d->locationMark);
+ d->editor->textDocument()->markableInterface()->addMark(d->locationMark);
QPlainTextEdit *plainTextEdit = qobject_cast<QPlainTextEdit *>(d->editor->widget());
QTC_ASSERT(plainTextEdit, return);
QTextCursor tc = plainTextEdit->textCursor();
diff --git a/src/plugins/debugger/watchhandler.cpp b/src/plugins/debugger/watchhandler.cpp
index 23a149dab5..84c50ec6d6 100644
--- a/src/plugins/debugger/watchhandler.cpp
+++ b/src/plugins/debugger/watchhandler.cpp
@@ -1230,8 +1230,10 @@ QStringList WatchModel::typeFormatList(const WatchData &data) const
<< tr("Local 8bit string")
<< tr("UTF16 string")
<< tr("UCS4 string")
- << tr("Array of 10 items")
- << tr("Array of 1000 items");
+ << tr("Array of %1 items").arg(10)
+ << tr("Array of %1 items").arg(100)
+ << tr("Array of %1 items").arg(1000)
+ << tr("Array of %1 items").arg(10000);
if (data.type.contains("char[") || data.type.contains("char ["))
return QStringList()
<< tr("Latin1 string")