forked from qt-creator/qt-creator
debugger: start attempt to handle dwarf index data
This commit is contained in:
@@ -237,6 +237,7 @@ enum ModelRoles
|
|||||||
|
|
||||||
// Modules
|
// Modules
|
||||||
RequestReloadModulesRole,
|
RequestReloadModulesRole,
|
||||||
|
RequestExamineModulesRole,
|
||||||
RequestModuleSymbolsRole,
|
RequestModuleSymbolsRole,
|
||||||
RequestAllSymbolsRole,
|
RequestAllSymbolsRole,
|
||||||
RequestOpenFileRole,
|
RequestOpenFileRole,
|
||||||
|
@@ -136,6 +136,7 @@ public:
|
|||||||
virtual void activateFrame(int index) { Q_UNUSED(index); }
|
virtual void activateFrame(int index) { Q_UNUSED(index); }
|
||||||
|
|
||||||
virtual void reloadModules() {}
|
virtual void reloadModules() {}
|
||||||
|
virtual void examineModules() {}
|
||||||
virtual void loadSymbols(const QString &moduleName)
|
virtual void loadSymbols(const QString &moduleName)
|
||||||
{ Q_UNUSED(moduleName); }
|
{ Q_UNUSED(moduleName); }
|
||||||
virtual void loadAllSymbols() {}
|
virtual void loadAllSymbols() {}
|
||||||
|
@@ -2672,6 +2672,27 @@ void GdbEngine::handleModulesList(const GdbResponse &response)
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void GdbEngine::examineModules()
|
||||||
|
{
|
||||||
|
foreach (Module module, modulesHandler()->modules()) {
|
||||||
|
if (module.symbolsType == Module::UnknownType) {
|
||||||
|
QProcess proc;
|
||||||
|
qDebug() << _("objdump -h \"%1\"").arg(module.moduleName);
|
||||||
|
proc.start(_("objdump -h \"%1\"").arg(module.moduleName));
|
||||||
|
if (!proc.waitForStarted())
|
||||||
|
continue;
|
||||||
|
if (!proc.waitForFinished())
|
||||||
|
continue;
|
||||||
|
QByteArray ba = proc.readAllStandardOutput();
|
||||||
|
if (ba.contains(".gdb_index"))
|
||||||
|
module.symbolsType = Module::FastSymbols;
|
||||||
|
else
|
||||||
|
module.symbolsType = Module::PlainSymbols;
|
||||||
|
modulesHandler()->updateModule(module.moduleName, module);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
//////////////////////////////////////////////////////////////////////
|
//////////////////////////////////////////////////////////////////////
|
||||||
//
|
//
|
||||||
// Source files specific stuff
|
// Source files specific stuff
|
||||||
|
@@ -368,6 +368,7 @@ private: ////////// View & Data Stuff //////////
|
|||||||
virtual void loadAllSymbols();
|
virtual void loadAllSymbols();
|
||||||
virtual void requestModuleSymbols(const QString &moduleName);
|
virtual void requestModuleSymbols(const QString &moduleName);
|
||||||
virtual void reloadModules();
|
virtual void reloadModules();
|
||||||
|
virtual void examineModules();
|
||||||
void reloadModulesInternal();
|
void reloadModulesInternal();
|
||||||
void handleModulesList(const GdbResponse &response);
|
void handleModulesList(const GdbResponse &response);
|
||||||
|
|
||||||
|
@@ -70,9 +70,10 @@ public:
|
|||||||
bool setData(const QModelIndex &index, const QVariant &value, int role);
|
bool setData(const QModelIndex &index, const QVariant &value, int role);
|
||||||
|
|
||||||
void clearModel();
|
void clearModel();
|
||||||
void addModule(const Module &m);
|
void addModule(const Module &module);
|
||||||
void removeModule(const QString &moduleName);
|
void removeModule(const QString &moduleName);
|
||||||
void setModules(const Modules &m);
|
void setModules(const Modules &modules);
|
||||||
|
void updateModule(const QString &moduleName, const Module &module);
|
||||||
|
|
||||||
const Modules &modules() const { return m_modules; }
|
const Modules &modules() const { return m_modules; }
|
||||||
|
|
||||||
@@ -167,6 +168,10 @@ bool ModulesModel::setData(const QModelIndex &index, const QVariant &value, int
|
|||||||
m_engine->reloadModules();
|
m_engine->reloadModules();
|
||||||
return true;
|
return true;
|
||||||
|
|
||||||
|
case RequestExamineModulesRole:
|
||||||
|
m_engine->examineModules();
|
||||||
|
return true;
|
||||||
|
|
||||||
case RequestModuleSymbolsRole:
|
case RequestModuleSymbolsRole:
|
||||||
m_engine->loadSymbols(value.toString());
|
m_engine->loadSymbols(value.toString());
|
||||||
return true;
|
return true;
|
||||||
@@ -216,12 +221,19 @@ void ModulesModel::removeModule(const QString &moduleName)
|
|||||||
{
|
{
|
||||||
const int index = indexOfModule(moduleName);
|
const int index = indexOfModule(moduleName);
|
||||||
QTC_ASSERT(index != -1, return);
|
QTC_ASSERT(index != -1, return);
|
||||||
|
|
||||||
beginRemoveRows(QModelIndex(), index, index);
|
beginRemoveRows(QModelIndex(), index, index);
|
||||||
m_modules.removeAt(index);
|
m_modules.removeAt(index);
|
||||||
endRemoveRows();
|
endRemoveRows();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void ModulesModel::updateModule(const QString &moduleName, const Module &module)
|
||||||
|
{
|
||||||
|
const int index = indexOfModule(moduleName);
|
||||||
|
QTC_ASSERT(index != -1, return);
|
||||||
|
m_modules[index] = module;
|
||||||
|
reset();
|
||||||
|
}
|
||||||
|
|
||||||
//////////////////////////////////////////////////////////////////
|
//////////////////////////////////////////////////////////////////
|
||||||
//
|
//
|
||||||
// ModulesHandler
|
// ModulesHandler
|
||||||
@@ -255,6 +267,11 @@ void ModulesHandler::removeModule(const QString &moduleName)
|
|||||||
m_model->removeModule(moduleName);
|
m_model->removeModule(moduleName);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void ModulesHandler::updateModule(const QString &moduleName, const Module &module)
|
||||||
|
{
|
||||||
|
m_model->updateModule(moduleName, module);
|
||||||
|
}
|
||||||
|
|
||||||
void ModulesHandler::setModules(const Modules &modules)
|
void ModulesHandler::setModules(const Modules &modules)
|
||||||
{
|
{
|
||||||
m_model->setModules(modules);
|
m_model->setModules(modules);
|
||||||
|
@@ -110,6 +110,7 @@ public:
|
|||||||
void setModules(const Modules &modules);
|
void setModules(const Modules &modules);
|
||||||
void addModule(const Module &module);
|
void addModule(const Module &module);
|
||||||
void removeModule(const QString &moduleName);
|
void removeModule(const QString &moduleName);
|
||||||
|
void updateModule(const QString &moduleName, const Module &module);
|
||||||
|
|
||||||
Modules modules() const;
|
Modules modules() const;
|
||||||
void removeAll();
|
void removeAll();
|
||||||
|
@@ -107,35 +107,55 @@ void ModulesWindow::contextMenuEvent(QContextMenuEvent *ev)
|
|||||||
model()->data(index, EngineCapabilitiesRole).toInt();
|
model()->data(index, EngineCapabilitiesRole).toInt();
|
||||||
|
|
||||||
QMenu menu;
|
QMenu menu;
|
||||||
QAction *act0 = new QAction(tr("Update Module List"), &menu);
|
|
||||||
act0->setEnabled(enabled && (capabilities & ReloadModuleCapability));
|
QAction *actUpdateModuleList
|
||||||
QAction *act3 = new QAction(tr("Show Source Files for Module \"%1\"").arg(name), &menu);
|
= new QAction(tr("Update Module List"), &menu);
|
||||||
act3->setEnabled(enabled && (capabilities & ReloadModuleCapability));
|
actUpdateModuleList
|
||||||
QAction *act4 = new QAction(tr("Load Symbols for All Modules"), &menu);
|
->setEnabled(enabled && (capabilities & ReloadModuleCapability));
|
||||||
act4->setEnabled(enabled && (capabilities & ReloadModuleSymbolsCapability));
|
|
||||||
QAction *act5 = 0;
|
QAction *actShowSourceFiles
|
||||||
QAction *act6 = 0;
|
= new QAction(tr("Show Source Files for Module \"%1\"").arg(name), &menu);
|
||||||
QAction *act7 = 0;
|
actShowSourceFiles
|
||||||
|
->setEnabled(enabled && (capabilities & ReloadModuleCapability));
|
||||||
|
|
||||||
|
QAction *actLoadSymbolsForAllModules
|
||||||
|
= new QAction(tr("Load Symbols for All Modules"), &menu);
|
||||||
|
actLoadSymbolsForAllModules
|
||||||
|
-> setEnabled(enabled && (capabilities & ReloadModuleSymbolsCapability));
|
||||||
|
|
||||||
|
QAction *actExamineAllModules
|
||||||
|
= new QAction(tr("Examine All Modules"), &menu);
|
||||||
|
actExamineAllModules
|
||||||
|
-> setEnabled(enabled && (capabilities & ReloadModuleSymbolsCapability));
|
||||||
|
|
||||||
|
QAction *actLoadSymbolsForModule = 0;
|
||||||
|
QAction *actEditFile = 0;
|
||||||
|
QAction *actShowSymbols = 0;
|
||||||
if (name.isEmpty()) {
|
if (name.isEmpty()) {
|
||||||
act5 = new QAction(tr("Load Symbols for Module"), &menu);
|
actLoadSymbolsForModule = new QAction(tr("Load Symbols for Module"), &menu);
|
||||||
act5->setEnabled(false);
|
actLoadSymbolsForModule->setEnabled(false);
|
||||||
act6 = new QAction(tr("Edit File"), &menu);
|
actEditFile = new QAction(tr("Edit File"), &menu);
|
||||||
act6->setEnabled(false);
|
actEditFile->setEnabled(false);
|
||||||
act7 = new QAction(tr("Show Symbols"), &menu);
|
actShowSymbols = new QAction(tr("Show Symbols"), &menu);
|
||||||
act7->setEnabled(false);
|
actShowSymbols->setEnabled(false);
|
||||||
} else {
|
} else {
|
||||||
act5 = new QAction(tr("Load Symbols for Module \"%1\"").arg(name), &menu);
|
actLoadSymbolsForModule
|
||||||
act5->setEnabled(capabilities & ReloadModuleSymbolsCapability);
|
= new QAction(tr("Load Symbols for Module \"%1\"").arg(name), &menu);
|
||||||
act6 = new QAction(tr("Edit File \"%1\"").arg(name), &menu);
|
actLoadSymbolsForModule
|
||||||
act7 = new QAction(tr("Show Symbols in File \"%1\"").arg(name), &menu);
|
->setEnabled(capabilities & ReloadModuleSymbolsCapability);
|
||||||
|
actEditFile
|
||||||
|
= new QAction(tr("Edit File \"%1\"").arg(name), &menu);
|
||||||
|
actShowSymbols
|
||||||
|
= new QAction(tr("Show Symbols in File \"%1\"").arg(name), &menu);
|
||||||
}
|
}
|
||||||
|
|
||||||
menu.addAction(act0);
|
menu.addAction(actUpdateModuleList);
|
||||||
//menu.addAction(act3); // FIXME
|
//menu.addAction(actShowSourceFiles); // FIXME
|
||||||
menu.addAction(act4);
|
menu.addAction(actLoadSymbolsForAllModules);
|
||||||
menu.addAction(act5);
|
menu.addAction(actExamineAllModules);
|
||||||
menu.addAction(act6);
|
menu.addAction(actLoadSymbolsForModule);
|
||||||
//menu.addAction(act7); // FIXME
|
menu.addAction(actEditFile);
|
||||||
|
//menu.addAction(actShowSymbols); // FIXME
|
||||||
menu.addSeparator();
|
menu.addSeparator();
|
||||||
QAction *actAdjustColumnWidths =
|
QAction *actAdjustColumnWidths =
|
||||||
menu.addAction(tr("Adjust Column Widths to Contents"));
|
menu.addAction(tr("Adjust Column Widths to Contents"));
|
||||||
@@ -148,21 +168,23 @@ void ModulesWindow::contextMenuEvent(QContextMenuEvent *ev)
|
|||||||
|
|
||||||
QAction *act = menu.exec(ev->globalPos());
|
QAction *act = menu.exec(ev->globalPos());
|
||||||
|
|
||||||
if (act == act0) {
|
if (act == actUpdateModuleList) {
|
||||||
setModelData(RequestReloadModulesRole);
|
setModelData(RequestReloadModulesRole);
|
||||||
} else if (act == actAdjustColumnWidths) {
|
} else if (act == actAdjustColumnWidths) {
|
||||||
resizeColumnsToContents();
|
resizeColumnsToContents();
|
||||||
} else if (act == actAlwaysAdjustColumnWidth) {
|
} else if (act == actAlwaysAdjustColumnWidth) {
|
||||||
setAlwaysResizeColumnsToContents(!m_alwaysResizeColumnsToContents);
|
setAlwaysResizeColumnsToContents(!m_alwaysResizeColumnsToContents);
|
||||||
//} else if (act == act3) {
|
//} else if (act == actShowSourceFiles) {
|
||||||
// emit displaySourceRequested(name);
|
// emit displaySourceRequested(name);
|
||||||
} else if (act == act4) {
|
} else if (act == actLoadSymbolsForAllModules) {
|
||||||
setModelData(RequestAllSymbolsRole);
|
setModelData(RequestAllSymbolsRole);
|
||||||
} else if (act == act5) {
|
} else if (act == actExamineAllModules) {
|
||||||
|
setModelData(RequestExamineModulesRole);
|
||||||
|
} else if (act == actLoadSymbolsForModule) {
|
||||||
setModelData(RequestModuleSymbolsRole, name);
|
setModelData(RequestModuleSymbolsRole, name);
|
||||||
} else if (act == act6) {
|
} else if (act == actEditFile) {
|
||||||
setModelData(RequestOpenFileRole, name);
|
setModelData(RequestOpenFileRole, name);
|
||||||
} else if (act == act7) {
|
} else if (act == actShowSymbols) {
|
||||||
setModelData(RequestModuleSymbolsRole, name);
|
setModelData(RequestModuleSymbolsRole, name);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user