forked from qt-creator/qt-creator
Debugger: Handle extra dumpers with LLDB
This generalizes part of the previously GDB-only code paths Change-Id: Id32798073e3c8bcb23bfedf463bebc866c8275e2 Reviewed-by: hjk <hjk@theqtcompany.com>
This commit is contained in:
@@ -1737,22 +1737,7 @@ void GdbEngine::handlePythonSetup(const GdbResponse &response)
|
||||
if (response.resultClass == GdbResultDone) {
|
||||
GdbMi data;
|
||||
data.fromStringMultiple(response.consoleStreamOutput);
|
||||
const GdbMi dumpers = data["dumpers"];
|
||||
foreach (const GdbMi &dumper, dumpers.children()) {
|
||||
QByteArray type = dumper["type"].data();
|
||||
QStringList formats(tr("Raw structure"));
|
||||
foreach (const QByteArray &format,
|
||||
dumper["formats"].data().split(',')) {
|
||||
if (format == "Normal")
|
||||
formats.append(tr("Normal"));
|
||||
else if (format == "Displayed")
|
||||
formats.append(tr("Displayed"));
|
||||
else if (!format.isEmpty())
|
||||
formats.append(_(format));
|
||||
}
|
||||
watchHandler()->addTypeFormats(type, formats);
|
||||
}
|
||||
|
||||
watchHandler()->addDumpers(data["dumpers"]);
|
||||
loadInitScript();
|
||||
QTC_ASSERT(state() == EngineSetupRequested, qDebug() << state());
|
||||
showMessage(_("ENGINE SUCCESSFULLY STARTED"));
|
||||
|
||||
@@ -281,10 +281,13 @@ void LldbEngine::setupInferior()
|
||||
const QString commands = stringSetting(ExtraDumperCommands);
|
||||
if (!commands.isEmpty()) {
|
||||
Command cmd("executeDebuggerCommand");
|
||||
cmd.arg(commands.toUtf8());
|
||||
cmd.arg("commands", commands.toUtf8());
|
||||
runCommand(cmd);
|
||||
}
|
||||
|
||||
Command cmd1("loadDumperFiles");
|
||||
runCommand(cmd1);
|
||||
|
||||
QString executable;
|
||||
QtcProcess::Arguments args;
|
||||
QtcProcess::prepareCommand(QFileInfo(sp.executable).absoluteFilePath(),
|
||||
@@ -409,6 +412,8 @@ void LldbEngine::handleResponse(const QByteArray &response)
|
||||
const QByteArray name = item.name();
|
||||
if (name == "data")
|
||||
refreshLocals(item);
|
||||
else if (name == "dumpers")
|
||||
watchHandler()->addDumpers(item);
|
||||
else if (name == "stack")
|
||||
refreshStack(item);
|
||||
else if (name == "stack-position")
|
||||
|
||||
@@ -1783,6 +1783,22 @@ QByteArray WatchHandler::individualFormatRequests() const
|
||||
return ba;
|
||||
}
|
||||
|
||||
void WatchHandler::addDumpers(const GdbMi &dumpers)
|
||||
{
|
||||
foreach (const GdbMi &dumper, dumpers.children()) {
|
||||
QStringList formats(tr("Raw structure"));
|
||||
foreach (const QByteArray &format, dumper["formats"].data().split(',')) {
|
||||
if (format == "Normal")
|
||||
formats.append(tr("Normal"));
|
||||
else if (format == "Displayed")
|
||||
formats.append(tr("Displayed"));
|
||||
else if (!format.isEmpty())
|
||||
formats.append(QString::fromLatin1(format));
|
||||
}
|
||||
addTypeFormats(dumper["type"].data(), formats);
|
||||
}
|
||||
}
|
||||
|
||||
void WatchHandler::addTypeFormats(const QByteArray &type, const QStringList &formats)
|
||||
{
|
||||
m_model->m_reportedTypeFormats.insert(QLatin1String(stripForFormat(type)), formats);
|
||||
|
||||
@@ -217,6 +217,7 @@ public:
|
||||
|
||||
int format(const QByteArray &iname) const;
|
||||
|
||||
void addDumpers(const GdbMi &dumpers);
|
||||
void addTypeFormats(const QByteArray &type, const QStringList &formats);
|
||||
void setTypeFormats(const DumperTypeFormats &typeFormats);
|
||||
DumperTypeFormats typeFormats() const;
|
||||
|
||||
Reference in New Issue
Block a user