forked from qt-creator/qt-creator
debugger: move RegisterHandler from DebuggerManager to DebuggerRunControl
This commit is contained in:
@@ -310,9 +310,9 @@ void CdbDebugEngine::setToolTipExpression(const QPoint &mousePos, TextEditor::IT
|
|||||||
|
|
||||||
void CdbDebugEnginePrivate::clearDisplay()
|
void CdbDebugEnginePrivate::clearDisplay()
|
||||||
{
|
{
|
||||||
manager()->threadsHandler()->removeAll();
|
m_engine->threadsHandler()->removeAll();
|
||||||
manager()->modulesHandler()->removeAll();
|
m_engine->modulesHandler()->removeAll();
|
||||||
manager()->registerHandler()->removeAll();
|
m_engine->registerHandler()->removeAll();
|
||||||
}
|
}
|
||||||
|
|
||||||
void CdbDebugEnginePrivate::checkVersion()
|
void CdbDebugEnginePrivate::checkVersion()
|
||||||
@@ -510,7 +510,7 @@ void CdbDebugEnginePrivate::processCreatedAttached(ULONG64 processHandle, ULONG6
|
|||||||
}
|
}
|
||||||
// Clear any saved breakpoints and set initial breakpoints
|
// Clear any saved breakpoints and set initial breakpoints
|
||||||
m_engine->executeDebuggerCommand(QLatin1String("bc"));
|
m_engine->executeDebuggerCommand(QLatin1String("bc"));
|
||||||
if (manager()->breakHandler()->hasPendingBreakpoints()) {
|
if (m_engine->breakHandler()->hasPendingBreakpoints()) {
|
||||||
if (debugCDBExecution)
|
if (debugCDBExecution)
|
||||||
qDebug() << "processCreatedAttached: Syncing breakpoints";
|
qDebug() << "processCreatedAttached: Syncing breakpoints";
|
||||||
m_engine->attemptBreakpointSynchronization();
|
m_engine->attemptBreakpointSynchronization();
|
||||||
@@ -519,7 +519,7 @@ void CdbDebugEnginePrivate::processCreatedAttached(ULONG64 processHandle, ULONG6
|
|||||||
// the exception to be delivered to the debugger
|
// the exception to be delivered to the debugger
|
||||||
// Also, see special handling in slotModulesLoaded().
|
// Also, see special handling in slotModulesLoaded().
|
||||||
if (m_mode == AttachCrashedExternal) {
|
if (m_mode == AttachCrashedExternal) {
|
||||||
const QString crashParameter = manager()->runControl()->sp().crashParameter;
|
const QString crashParameter = m_engine->runControl()->sp().crashParameter;
|
||||||
if (!crashParameter.isEmpty()) {
|
if (!crashParameter.isEmpty()) {
|
||||||
ULONG64 evtNr = crashParameter.toULongLong();
|
ULONG64 evtNr = crashParameter.toULongLong();
|
||||||
const HRESULT hr = interfaces().debugControl->SetNotifyEventHandle(evtNr);
|
const HRESULT hr = interfaces().debugControl->SetNotifyEventHandle(evtNr);
|
||||||
@@ -1251,7 +1251,7 @@ void CdbDebugEngine::reloadRegisters()
|
|||||||
const Registers registers = getRegisters(m_d->interfaces().debugControl, m_d->interfaces().debugRegisters, &errorMessage, intBase);
|
const Registers registers = getRegisters(m_d->interfaces().debugControl, m_d->interfaces().debugRegisters, &errorMessage, intBase);
|
||||||
if (registers.isEmpty() && !errorMessage.isEmpty())
|
if (registers.isEmpty() && !errorMessage.isEmpty())
|
||||||
warning(msgFunctionFailed("reloadRegisters" , errorMessage));
|
warning(msgFunctionFailed("reloadRegisters" , errorMessage));
|
||||||
manager()->registerHandler()->setRegisters(registers);
|
registerHandler()->setRegisters(registers);
|
||||||
}
|
}
|
||||||
|
|
||||||
void CdbDebugEngine::slotConsoleStubStarted()
|
void CdbDebugEngine::slotConsoleStubStarted()
|
||||||
|
@@ -52,11 +52,8 @@
|
|||||||
#include "watchwindow.h"
|
#include "watchwindow.h"
|
||||||
|
|
||||||
#include "breakhandler.h"
|
#include "breakhandler.h"
|
||||||
#include "moduleshandler.h"
|
|
||||||
#include "registerhandler.h"
|
|
||||||
#include "snapshothandler.h"
|
#include "snapshothandler.h"
|
||||||
#include "stackhandler.h"
|
#include "stackhandler.h"
|
||||||
#include "stackframe.h"
|
|
||||||
#include "threadshandler.h"
|
#include "threadshandler.h"
|
||||||
#include "watchhandler.h"
|
#include "watchhandler.h"
|
||||||
|
|
||||||
@@ -280,7 +277,6 @@ struct DebuggerManagerPrivate
|
|||||||
|
|
||||||
// FIXME: Move to DebuggerRunControl
|
// FIXME: Move to DebuggerRunControl
|
||||||
BreakHandler *m_breakHandler;
|
BreakHandler *m_breakHandler;
|
||||||
RegisterHandler *m_registerHandler;
|
|
||||||
SnapshotHandler *m_snapshotHandler;
|
SnapshotHandler *m_snapshotHandler;
|
||||||
StackHandler *m_stackHandler;
|
StackHandler *m_stackHandler;
|
||||||
ThreadsHandler *m_threadsHandler;
|
ThreadsHandler *m_threadsHandler;
|
||||||
@@ -303,7 +299,7 @@ struct DebuggerManagerPrivate
|
|||||||
QWidget *m_returnWindow;
|
QWidget *m_returnWindow;
|
||||||
QWidget *m_localsWindow;
|
QWidget *m_localsWindow;
|
||||||
QWidget *m_watchersWindow;
|
QWidget *m_watchersWindow;
|
||||||
QWidget *m_registerWindow;
|
QAbstractItemView *m_registerWindow;
|
||||||
QAbstractItemView *m_modulesWindow;
|
QAbstractItemView *m_modulesWindow;
|
||||||
QWidget *m_snapshotWindow;
|
QWidget *m_snapshotWindow;
|
||||||
SourceFilesWindow *m_sourceFilesWindow;
|
SourceFilesWindow *m_sourceFilesWindow;
|
||||||
@@ -358,7 +354,6 @@ DebuggerManager::~DebuggerManager()
|
|||||||
|
|
||||||
doDelete(d->m_breakHandler);
|
doDelete(d->m_breakHandler);
|
||||||
doDelete(d->m_threadsHandler);
|
doDelete(d->m_threadsHandler);
|
||||||
doDelete(d->m_registerHandler);
|
|
||||||
doDelete(d->m_snapshotHandler);
|
doDelete(d->m_snapshotHandler);
|
||||||
doDelete(d->m_stackHandler);
|
doDelete(d->m_stackHandler);
|
||||||
doDelete(d->m_watchHandler);
|
doDelete(d->m_watchHandler);
|
||||||
@@ -377,8 +372,6 @@ void DebuggerManager::init()
|
|||||||
d->m_state = DebuggerState(-1);
|
d->m_state = DebuggerState(-1);
|
||||||
d->m_busy = false;
|
d->m_busy = false;
|
||||||
|
|
||||||
d->m_registerHandler = 0;
|
|
||||||
|
|
||||||
d->m_statusLabel = new QLabel;
|
d->m_statusLabel = new QLabel;
|
||||||
d->m_statusLabel->setMinimumSize(QSize(30, 10));
|
d->m_statusLabel->setMinimumSize(QSize(30, 10));
|
||||||
|
|
||||||
@@ -468,13 +461,6 @@ void DebuggerManager::init()
|
|||||||
connect(sourceFilesView, SIGNAL(fileOpenRequested(QString)),
|
connect(sourceFilesView, SIGNAL(fileOpenRequested(QString)),
|
||||||
this, SLOT(fileOpen(QString)));
|
this, SLOT(fileOpen(QString)));
|
||||||
|
|
||||||
// Registers
|
|
||||||
QAbstractItemView *registerView =
|
|
||||||
qobject_cast<QAbstractItemView *>(d->m_registerWindow);
|
|
||||||
d->m_registerHandler = new RegisterHandler;
|
|
||||||
registerView->setModel(d->m_registerHandler->model());
|
|
||||||
|
|
||||||
|
|
||||||
// Return Value
|
// Return Value
|
||||||
d->m_watchHandler = new WatchHandler(this);
|
d->m_watchHandler = new WatchHandler(this);
|
||||||
QTreeView *returnView = qobject_cast<QTreeView *>(d->m_returnWindow);
|
QTreeView *returnView = qobject_cast<QTreeView *>(d->m_returnWindow);
|
||||||
@@ -712,6 +698,11 @@ void DebuggerManager::clearCppCodeModelSnapshot()
|
|||||||
d->m_codeModelSnapshot = CPlusPlus::Snapshot();
|
d->m_codeModelSnapshot = CPlusPlus::Snapshot();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
QAbstractItemView *DebuggerManager::registerWindow() const
|
||||||
|
{
|
||||||
|
return d->m_registerWindow;
|
||||||
|
}
|
||||||
|
|
||||||
QAbstractItemView *DebuggerManager::modulesWindow() const
|
QAbstractItemView *DebuggerManager::modulesWindow() const
|
||||||
{
|
{
|
||||||
return d->m_modulesWindow;
|
return d->m_modulesWindow;
|
||||||
@@ -833,7 +824,7 @@ void DebuggerManager::notifyInferiorPidChanged(qint64 pid)
|
|||||||
|
|
||||||
void DebuggerManager::aboutToShutdown()
|
void DebuggerManager::aboutToShutdown()
|
||||||
{
|
{
|
||||||
// TODO: STATE_DEBUG(d->m_engine);
|
STATE_DEBUG(d->m_engine);
|
||||||
if (d->m_engine)
|
if (d->m_engine)
|
||||||
d->m_engine->shutdown();
|
d->m_engine->shutdown();
|
||||||
d->m_engine = 0;
|
d->m_engine = 0;
|
||||||
@@ -1088,7 +1079,6 @@ void DebuggerManager::cleanupViews()
|
|||||||
stackHandler()->removeAll();
|
stackHandler()->removeAll();
|
||||||
threadsHandler()->removeAll();
|
threadsHandler()->removeAll();
|
||||||
watchHandler()->cleanup();
|
watchHandler()->cleanup();
|
||||||
registerHandler()->removeAll();
|
|
||||||
d->m_sourceFilesWindow->removeAll();
|
d->m_sourceFilesWindow->removeAll();
|
||||||
d->m_disassemblerViewAgent.cleanup();
|
d->m_disassemblerViewAgent.cleanup();
|
||||||
d->m_actions.reverseDirectionAction->setChecked(false);
|
d->m_actions.reverseDirectionAction->setChecked(false);
|
||||||
@@ -1936,7 +1926,7 @@ void DebuggerManager::openTextEditor(const QString &titlePattern,
|
|||||||
|
|
||||||
DebuggerRunControl *DebuggerManager::runControl() const
|
DebuggerRunControl *DebuggerManager::runControl() const
|
||||||
{
|
{
|
||||||
return const_cast<DebuggerRunControl *>(d->m_runControl);
|
return d->m_runControl;
|
||||||
}
|
}
|
||||||
|
|
||||||
DebuggerOutputWindow *DebuggerManager::debuggerOutputWindow() const
|
DebuggerOutputWindow *DebuggerManager::debuggerOutputWindow() const
|
||||||
@@ -1949,11 +1939,6 @@ BreakHandler *DebuggerManager::breakHandler() const
|
|||||||
return d->m_breakHandler;
|
return d->m_breakHandler;
|
||||||
}
|
}
|
||||||
|
|
||||||
RegisterHandler *DebuggerManager::registerHandler() const
|
|
||||||
{
|
|
||||||
return d->m_registerHandler;
|
|
||||||
}
|
|
||||||
|
|
||||||
StackHandler *DebuggerManager::stackHandler() const
|
StackHandler *DebuggerManager::stackHandler() const
|
||||||
{
|
{
|
||||||
return d->m_stackHandler;
|
return d->m_stackHandler;
|
||||||
@@ -1974,53 +1959,6 @@ SnapshotHandler *DebuggerManager::snapshotHandler() const
|
|||||||
return d->m_snapshotHandler;
|
return d->m_snapshotHandler;
|
||||||
}
|
}
|
||||||
|
|
||||||
//////////////////////////////////////////////////////////////////////
|
|
||||||
//
|
|
||||||
// AbstractDebuggerEngine
|
|
||||||
//
|
|
||||||
//////////////////////////////////////////////////////////////////////
|
|
||||||
|
|
||||||
/*
|
|
||||||
void IDebuggerEngine::showStatusMessage(const QString &msg, int timeout)
|
|
||||||
{
|
|
||||||
m_manager->showStatusMessage(msg, timeout);
|
|
||||||
}
|
|
||||||
*/
|
|
||||||
|
|
||||||
DebuggerState IDebuggerEngine::state() const
|
|
||||||
{
|
|
||||||
return m_manager->state();
|
|
||||||
}
|
|
||||||
|
|
||||||
void IDebuggerEngine::setState(DebuggerState state, bool forced)
|
|
||||||
{
|
|
||||||
m_manager->setState(state, forced);
|
|
||||||
}
|
|
||||||
|
|
||||||
bool IDebuggerEngine::debuggerActionsEnabled() const
|
|
||||||
{
|
|
||||||
return m_manager->debuggerActionsEnabled();
|
|
||||||
}
|
|
||||||
|
|
||||||
void IDebuggerEngine::showModuleSymbols
|
|
||||||
(const QString &moduleName, const Symbols &symbols)
|
|
||||||
{
|
|
||||||
QTreeWidget *w = new QTreeWidget;
|
|
||||||
w->setColumnCount(3);
|
|
||||||
w->setRootIsDecorated(false);
|
|
||||||
w->setAlternatingRowColors(true);
|
|
||||||
w->setSortingEnabled(true);
|
|
||||||
w->setHeaderLabels(QStringList() << tr("Symbol") << tr("Address") << tr("Code"));
|
|
||||||
w->setWindowTitle(tr("Symbols in \"%1\"").arg(moduleName));
|
|
||||||
foreach (const Symbol &s, symbols) {
|
|
||||||
QTreeWidgetItem *it = new QTreeWidgetItem;
|
|
||||||
it->setData(0, Qt::DisplayRole, s.name);
|
|
||||||
it->setData(1, Qt::DisplayRole, s.address);
|
|
||||||
it->setData(2, Qt::DisplayRole, s.state);
|
|
||||||
w->addTopLevelItem(it);
|
|
||||||
}
|
|
||||||
manager()->createNewDock(w);
|
|
||||||
}
|
|
||||||
//////////////////////////////////////////////////////////////////////
|
//////////////////////////////////////////////////////////////////////
|
||||||
//
|
//
|
||||||
// Testing
|
// Testing
|
||||||
|
@@ -255,16 +255,17 @@ public slots: // FIXME
|
|||||||
friend class DebuggerRunControl;
|
friend class DebuggerRunControl;
|
||||||
public:
|
public:
|
||||||
Internal::BreakHandler *breakHandler() const;
|
Internal::BreakHandler *breakHandler() const;
|
||||||
Internal::RegisterHandler *registerHandler() const;
|
|
||||||
Internal::StackHandler *stackHandler() const;
|
Internal::StackHandler *stackHandler() const;
|
||||||
Internal::ThreadsHandler *threadsHandler() const;
|
Internal::ThreadsHandler *threadsHandler() const;
|
||||||
Internal::WatchHandler *watchHandler() const;
|
Internal::WatchHandler *watchHandler() const;
|
||||||
Internal::SnapshotHandler *snapshotHandler() const;
|
Internal::SnapshotHandler *snapshotHandler() const;
|
||||||
|
|
||||||
Internal::DebuggerOutputWindow *debuggerOutputWindow() const;
|
Internal::DebuggerOutputWindow *debuggerOutputWindow() const;
|
||||||
|
|
||||||
private:
|
private:
|
||||||
Internal::SourceFilesWindow *sourceFileWindow() const;
|
Internal::SourceFilesWindow *sourceFileWindow() const;
|
||||||
QAbstractItemView *modulesWindow() const;
|
QAbstractItemView *modulesWindow() const;
|
||||||
|
QAbstractItemView *registerWindow() const;
|
||||||
QWidget *threadsWindow() const;
|
QWidget *threadsWindow() const;
|
||||||
|
|
||||||
Internal::DebuggerManagerActions debuggerManagerActions() const;
|
Internal::DebuggerManagerActions debuggerManagerActions() const;
|
||||||
|
@@ -32,7 +32,15 @@
|
|||||||
#include "debuggeroutputwindow.h"
|
#include "debuggeroutputwindow.h"
|
||||||
|
|
||||||
#include "idebuggerengine.h"
|
#include "idebuggerengine.h"
|
||||||
|
|
||||||
|
#include "breakhandler.h"
|
||||||
#include "moduleshandler.h"
|
#include "moduleshandler.h"
|
||||||
|
#include "registerhandler.h"
|
||||||
|
#include "snapshothandler.h"
|
||||||
|
#include "stackhandler.h"
|
||||||
|
#include "stackframe.h"
|
||||||
|
#include "threadshandler.h"
|
||||||
|
#include "watchhandler.h"
|
||||||
|
|
||||||
#include <projectexplorer/debugginghelper.h>
|
#include <projectexplorer/debugginghelper.h>
|
||||||
#include <projectexplorer/environment.h>
|
#include <projectexplorer/environment.h>
|
||||||
@@ -51,6 +59,7 @@
|
|||||||
|
|
||||||
#include <QtGui/QAbstractItemView>
|
#include <QtGui/QAbstractItemView>
|
||||||
#include <QtGui/QTextDocument>
|
#include <QtGui/QTextDocument>
|
||||||
|
#include <QtGui/QTreeWidget>
|
||||||
|
|
||||||
using namespace ProjectExplorer;
|
using namespace ProjectExplorer;
|
||||||
using namespace Debugger::Internal;
|
using namespace Debugger::Internal;
|
||||||
@@ -159,10 +168,10 @@ public:
|
|||||||
bool m_running;
|
bool m_running;
|
||||||
|
|
||||||
ModulesHandler *m_modulesHandler;
|
ModulesHandler *m_modulesHandler;
|
||||||
|
RegisterHandler *m_registerHandler;
|
||||||
/*
|
/*
|
||||||
// FIXME: Move from DebuggerManager
|
// FIXME: Move from DebuggerManager
|
||||||
BreakHandler *m_breakHandler;
|
BreakHandler *m_breakHandler;
|
||||||
RegisterHandler *m_registerHandler;
|
|
||||||
SnapshotHandler *m_snapshotHandler;
|
SnapshotHandler *m_snapshotHandler;
|
||||||
StackHandler *m_stackHandler;
|
StackHandler *m_stackHandler;
|
||||||
ThreadsHandler *m_threadsHandler;
|
ThreadsHandler *m_threadsHandler;
|
||||||
@@ -180,12 +189,14 @@ DebuggerRunControl::Private::Private(DebuggerRunControl *parent,
|
|||||||
{
|
{
|
||||||
m_running = false;
|
m_running = false;
|
||||||
m_modulesHandler = new ModulesHandler(q);
|
m_modulesHandler = new ModulesHandler(q);
|
||||||
|
m_registerHandler = new RegisterHandler();
|
||||||
}
|
}
|
||||||
|
|
||||||
DebuggerRunControl::Private::~Private()
|
DebuggerRunControl::Private::~Private()
|
||||||
{
|
{
|
||||||
#define doDelete(ptr) delete ptr; ptr = 0
|
#define doDelete(ptr) delete ptr; ptr = 0
|
||||||
doDelete(m_modulesHandler);
|
doDelete(m_modulesHandler);
|
||||||
|
doDelete(m_registerHandler);
|
||||||
#undef doDelete
|
#undef doDelete
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -326,7 +337,7 @@ BreakHandler *DebuggerRunControl::breakHandler() const
|
|||||||
|
|
||||||
RegisterHandler *DebuggerRunControl::registerHandler() const
|
RegisterHandler *DebuggerRunControl::registerHandler() const
|
||||||
{
|
{
|
||||||
return d->m_manager->registerHandler();
|
return d->m_registerHandler;
|
||||||
}
|
}
|
||||||
|
|
||||||
StackHandler *DebuggerRunControl::stackHandler() const
|
StackHandler *DebuggerRunControl::stackHandler() const
|
||||||
@@ -365,7 +376,92 @@ void DebuggerRunControl::startDebugger(IDebuggerEngine *engine)
|
|||||||
d->m_engine = engine;
|
d->m_engine = engine;
|
||||||
d->m_engine->setRunControl(this);
|
d->m_engine->setRunControl(this);
|
||||||
d->m_manager->modulesWindow()->setModel(d->m_modulesHandler->model());
|
d->m_manager->modulesWindow()->setModel(d->m_modulesHandler->model());
|
||||||
|
d->m_manager->registerWindow()->setModel(d->m_registerHandler->model());
|
||||||
d->m_engine->startDebugger();
|
d->m_engine->startDebugger();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
//////////////////////////////////////////////////////////////////////
|
||||||
|
//
|
||||||
|
// AbstractDebuggerEngine
|
||||||
|
//
|
||||||
|
//////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
|
/*
|
||||||
|
void IDebuggerEngine::showStatusMessage(const QString &msg, int timeout)
|
||||||
|
{
|
||||||
|
m_manager->showStatusMessage(msg, timeout);
|
||||||
|
}
|
||||||
|
*/
|
||||||
|
|
||||||
|
DebuggerState IDebuggerEngine::state() const
|
||||||
|
{
|
||||||
|
return m_manager->state();
|
||||||
|
}
|
||||||
|
|
||||||
|
void IDebuggerEngine::setState(DebuggerState state, bool forced)
|
||||||
|
{
|
||||||
|
m_manager->setState(state, forced);
|
||||||
|
}
|
||||||
|
|
||||||
|
bool IDebuggerEngine::debuggerActionsEnabled() const
|
||||||
|
{
|
||||||
|
return m_manager->debuggerActionsEnabled();
|
||||||
|
}
|
||||||
|
|
||||||
|
void IDebuggerEngine::showModuleSymbols
|
||||||
|
(const QString &moduleName, const Symbols &symbols)
|
||||||
|
{
|
||||||
|
QTreeWidget *w = new QTreeWidget;
|
||||||
|
w->setColumnCount(3);
|
||||||
|
w->setRootIsDecorated(false);
|
||||||
|
w->setAlternatingRowColors(true);
|
||||||
|
w->setSortingEnabled(true);
|
||||||
|
w->setHeaderLabels(QStringList() << tr("Symbol") << tr("Address") << tr("Code"));
|
||||||
|
w->setWindowTitle(tr("Symbols in \"%1\"").arg(moduleName));
|
||||||
|
foreach (const Symbol &s, symbols) {
|
||||||
|
QTreeWidgetItem *it = new QTreeWidgetItem;
|
||||||
|
it->setData(0, Qt::DisplayRole, s.name);
|
||||||
|
it->setData(1, Qt::DisplayRole, s.address);
|
||||||
|
it->setData(2, Qt::DisplayRole, s.state);
|
||||||
|
w->addTopLevelItem(it);
|
||||||
|
}
|
||||||
|
manager()->createNewDock(w);
|
||||||
|
}
|
||||||
|
|
||||||
|
ModulesHandler *IDebuggerEngine::modulesHandler() const
|
||||||
|
{
|
||||||
|
return runControl()->modulesHandler();
|
||||||
|
}
|
||||||
|
|
||||||
|
BreakHandler *IDebuggerEngine::breakHandler() const
|
||||||
|
{
|
||||||
|
return runControl()->breakHandler();
|
||||||
|
}
|
||||||
|
|
||||||
|
RegisterHandler *IDebuggerEngine::registerHandler() const
|
||||||
|
{
|
||||||
|
return runControl()->registerHandler();
|
||||||
|
}
|
||||||
|
|
||||||
|
StackHandler *IDebuggerEngine::stackHandler() const
|
||||||
|
{
|
||||||
|
return runControl()->stackHandler();
|
||||||
|
}
|
||||||
|
|
||||||
|
ThreadsHandler *IDebuggerEngine::threadsHandler() const
|
||||||
|
{
|
||||||
|
return runControl()->threadsHandler();
|
||||||
|
}
|
||||||
|
|
||||||
|
WatchHandler *IDebuggerEngine::watchHandler() const
|
||||||
|
{
|
||||||
|
return runControl()->watchHandler();
|
||||||
|
}
|
||||||
|
|
||||||
|
SnapshotHandler *IDebuggerEngine::snapshotHandler() const
|
||||||
|
{
|
||||||
|
return runControl()->snapshotHandler();
|
||||||
|
}
|
||||||
|
|
||||||
} // namespace Debugger
|
} // namespace Debugger
|
||||||
|
@@ -488,10 +488,9 @@ void GdbEngine::handleResponse(const QByteArray &buff)
|
|||||||
// line="1584",shlib="/../libFoo_debug.dylib",times="0"}
|
// line="1584",shlib="/../libFoo_debug.dylib",times="0"}
|
||||||
const GdbMi bkpt = result.findChild("bkpt");
|
const GdbMi bkpt = result.findChild("bkpt");
|
||||||
const int number = bkpt.findChild("number").data().toInt();
|
const int number = bkpt.findChild("number").data().toInt();
|
||||||
BreakHandler *handler = manager()->breakHandler();
|
BreakpointData *data = breakHandler()->findBreakpointByNumber(number);
|
||||||
BreakpointData *data = handler->findBreakpointByNumber(number);
|
|
||||||
setBreakpointDataFromOutput(data, bkpt);
|
setBreakpointDataFromOutput(data, bkpt);
|
||||||
handler->updateMarkers();
|
breakHandler()->updateMarkers();
|
||||||
} else {
|
} else {
|
||||||
qDebug() << "IGNORED ASYNC OUTPUT"
|
qDebug() << "IGNORED ASYNC OUTPUT"
|
||||||
<< asyncClass << result.toString();
|
<< asyncClass << result.toString();
|
||||||
@@ -876,7 +875,7 @@ void GdbEngine::commandTimeout()
|
|||||||
if (mb->exec() == QMessageBox::Ok) {
|
if (mb->exec() == QMessageBox::Ok) {
|
||||||
showMessage(_("KILLING DEBUGGER AS REQUESTED BY USER"));
|
showMessage(_("KILLING DEBUGGER AS REQUESTED BY USER"));
|
||||||
// This is an undefined state, so we just pull the emergency brake.
|
// This is an undefined state, so we just pull the emergency brake.
|
||||||
manager()->watchHandler()->endCycle();
|
watchHandler()->endCycle();
|
||||||
gdbProc()->kill();
|
gdbProc()->kill();
|
||||||
} else {
|
} else {
|
||||||
showMessage(_("CONTINUE DEBUGGER AS REQUESTED BY USER"));
|
showMessage(_("CONTINUE DEBUGGER AS REQUESTED BY USER"));
|
||||||
@@ -972,7 +971,7 @@ void GdbEngine::handleResultRecord(GdbResponse *response)
|
|||||||
GdbResultDone)) {
|
GdbResultDone)) {
|
||||||
#ifdef Q_OS_WIN
|
#ifdef Q_OS_WIN
|
||||||
// Ignore spurious 'running' responses to 'attach'
|
// Ignore spurious 'running' responses to 'attach'
|
||||||
const bool warning = !(manager()->runControl()->sp().startMode == AttachExternal
|
const bool warning = !(runControl()->sp().startMode == AttachExternal
|
||||||
&& cmd.command.startsWith("attach"));
|
&& cmd.command.startsWith("attach"));
|
||||||
#else
|
#else
|
||||||
const bool warning = true;
|
const bool warning = true;
|
||||||
@@ -1399,8 +1398,7 @@ void GdbEngine::handleStop1(const GdbMi &data)
|
|||||||
} else {
|
} else {
|
||||||
// Older gdb versions do not produce "library loaded" messages
|
// Older gdb versions do not produce "library loaded" messages
|
||||||
// so the breakpoint update is not triggered.
|
// so the breakpoint update is not triggered.
|
||||||
if (m_gdbVersion < 70000 && !m_isMacGdb
|
if (m_gdbVersion < 70000 && !m_isMacGdb && breakHandler()->size() > 0)
|
||||||
&& manager()->breakHandler()->size() > 0)
|
|
||||||
reloadBreakListInternal();
|
reloadBreakListInternal();
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1467,7 +1465,7 @@ void GdbEngine::handleStop1(const GdbMi &data)
|
|||||||
//
|
//
|
||||||
// Stack
|
// Stack
|
||||||
//
|
//
|
||||||
manager()->stackHandler()->setCurrentIndex(0);
|
stackHandler()->setCurrentIndex(0);
|
||||||
updateLocals(qVariantFromValue(frame)); // Quick shot
|
updateLocals(qVariantFromValue(frame)); // Quick shot
|
||||||
|
|
||||||
reloadStack(false);
|
reloadStack(false);
|
||||||
@@ -1713,7 +1711,7 @@ void GdbEngine::abortDebugger() // called from the manager
|
|||||||
|
|
||||||
int GdbEngine::currentFrame() const
|
int GdbEngine::currentFrame() const
|
||||||
{
|
{
|
||||||
return manager()->stackHandler()->currentIndex();
|
return stackHandler()->currentIndex();
|
||||||
}
|
}
|
||||||
|
|
||||||
static inline QString msgNoBinaryForToolChain(int tc)
|
static inline QString msgNoBinaryForToolChain(int tc)
|
||||||
@@ -1838,9 +1836,8 @@ void GdbEngine::executeStep()
|
|||||||
setTokenBarrier();
|
setTokenBarrier();
|
||||||
setState(InferiorRunningRequested);
|
setState(InferiorRunningRequested);
|
||||||
showStatusMessage(tr("Step requested..."), 5000);
|
showStatusMessage(tr("Step requested..."), 5000);
|
||||||
StackHandler *stackHandler = manager()->stackHandler();
|
if (m_gdbAdapter->isTrkAdapter() && stackHandler()->stackSize() > 0)
|
||||||
if (m_gdbAdapter->isTrkAdapter() && stackHandler->stackSize() > 0)
|
postCommand("sal step," + stackHandler()->topAddress().toLatin1());
|
||||||
postCommand("sal step," + stackHandler->topAddress().toLatin1());
|
|
||||||
if (manager()->isReverseDebugging())
|
if (manager()->isReverseDebugging())
|
||||||
postCommand("reverse-step", RunRequest, CB(handleExecuteStep));
|
postCommand("reverse-step", RunRequest, CB(handleExecuteStep));
|
||||||
else
|
else
|
||||||
@@ -1902,9 +1899,8 @@ void GdbEngine::executeNext()
|
|||||||
setTokenBarrier();
|
setTokenBarrier();
|
||||||
setState(InferiorRunningRequested);
|
setState(InferiorRunningRequested);
|
||||||
showStatusMessage(tr("Step next requested..."), 5000);
|
showStatusMessage(tr("Step next requested..."), 5000);
|
||||||
StackHandler *stackHandler = manager()->stackHandler();
|
if (m_gdbAdapter->isTrkAdapter() && stackHandler()->stackSize() > 0)
|
||||||
if (m_gdbAdapter->isTrkAdapter() && stackHandler->stackSize() > 0)
|
postCommand("sal next," + stackHandler()->topAddress().toLatin1());
|
||||||
postCommand("sal next," + stackHandler->topAddress().toLatin1());
|
|
||||||
if (manager()->isReverseDebugging())
|
if (manager()->isReverseDebugging())
|
||||||
postCommand("reverse-next", RunRequest, CB(handleExecuteNext));
|
postCommand("reverse-next", RunRequest, CB(handleExecuteNext));
|
||||||
else
|
else
|
||||||
@@ -2159,7 +2155,7 @@ QByteArray GdbEngine::breakpointLocation(const BreakpointData *data)
|
|||||||
|
|
||||||
void GdbEngine::sendInsertBreakpoint(int index)
|
void GdbEngine::sendInsertBreakpoint(int index)
|
||||||
{
|
{
|
||||||
const BreakpointData *data = manager()->breakHandler()->at(index);
|
const BreakpointData *data = breakHandler()->at(index);
|
||||||
// Set up fallback in case of pending breakpoints which aren't handled
|
// Set up fallback in case of pending breakpoints which aren't handled
|
||||||
// by the MI interface.
|
// by the MI interface.
|
||||||
if (data->type == BreakpointData::WatchpointType) {
|
if (data->type == BreakpointData::WatchpointType) {
|
||||||
@@ -2200,9 +2196,9 @@ void GdbEngine::handleWatchInsert(const GdbResponse &response)
|
|||||||
QByteArray ba = response.data.findChild("consolestreamoutput").data();
|
QByteArray ba = response.data.findChild("consolestreamoutput").data();
|
||||||
if (ba.startsWith("Hardware watchpoint ")) {
|
if (ba.startsWith("Hardware watchpoint ")) {
|
||||||
const int pos = ba.indexOf(':', 20);
|
const int pos = ba.indexOf(':', 20);
|
||||||
BreakpointData *data = manager()->breakHandler()->at(index);
|
BreakpointData *data = breakHandler()->at(index);
|
||||||
data->bpNumber = ba.mid(20, pos - 20);
|
data->bpNumber = ba.mid(20, pos - 20);
|
||||||
manager()->breakHandler()->updateMarkers();
|
breakHandler()->updateMarkers();
|
||||||
} else {
|
} else {
|
||||||
showMessage(_("CANNOT PARSE WATCHPOINT FROM" + ba));
|
showMessage(_("CANNOT PARSE WATCHPOINT FROM" + ba));
|
||||||
}
|
}
|
||||||
@@ -2212,7 +2208,7 @@ void GdbEngine::handleWatchInsert(const GdbResponse &response)
|
|||||||
void GdbEngine::handleBreakInsert1(const GdbResponse &response)
|
void GdbEngine::handleBreakInsert1(const GdbResponse &response)
|
||||||
{
|
{
|
||||||
int index = response.cookie.toInt();
|
int index = response.cookie.toInt();
|
||||||
BreakpointData *data = manager()->breakHandler()->at(index);
|
BreakpointData *data = breakHandler()->at(index);
|
||||||
if (response.resultClass == GdbResultDone) {
|
if (response.resultClass == GdbResultDone) {
|
||||||
// Interesting only on Mac?
|
// Interesting only on Mac?
|
||||||
GdbMi bkpt = response.data.findChild("bkpt");
|
GdbMi bkpt = response.data.findChild("bkpt");
|
||||||
@@ -2285,11 +2281,10 @@ void GdbEngine::handleBreakList(const GdbMi &table)
|
|||||||
//qDebug() << "LEFT" << bkpts.size() << "BREAKPOINTS";
|
//qDebug() << "LEFT" << bkpts.size() << "BREAKPOINTS";
|
||||||
}
|
}
|
||||||
|
|
||||||
BreakHandler *handler = manager()->breakHandler();
|
|
||||||
foreach (const GdbMi &bkpt, bkpts) {
|
foreach (const GdbMi &bkpt, bkpts) {
|
||||||
BreakpointData temp;
|
BreakpointData temp;
|
||||||
setBreakpointDataFromOutput(&temp, bkpt);
|
setBreakpointDataFromOutput(&temp, bkpt);
|
||||||
BreakpointData *data = handler->findSimilarBreakpoint(temp);
|
BreakpointData *data = breakHandler()->findSimilarBreakpoint(temp);
|
||||||
//qDebug() << "\n\nGOT: " << bkpt.toString() << '\n' << temp.toString();
|
//qDebug() << "\n\nGOT: " << bkpt.toString() << '\n' << temp.toString();
|
||||||
if (data) {
|
if (data) {
|
||||||
//qDebug() << " FROM: " << data->toString();
|
//qDebug() << " FROM: " << data->toString();
|
||||||
@@ -2306,9 +2301,8 @@ void GdbEngine::handleBreakList(const GdbMi &table)
|
|||||||
|
|
||||||
void GdbEngine::handleBreakDisable(const GdbResponse &response)
|
void GdbEngine::handleBreakDisable(const GdbResponse &response)
|
||||||
{
|
{
|
||||||
BreakHandler *handler = manager()->breakHandler();
|
|
||||||
if (response.resultClass == GdbResultDone) {
|
if (response.resultClass == GdbResultDone) {
|
||||||
handler->updateMarkers();
|
breakHandler()->updateMarkers();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -2325,8 +2319,7 @@ void GdbEngine::handleBreakIgnore(const GdbResponse &response)
|
|||||||
// 29^done
|
// 29^done
|
||||||
//
|
//
|
||||||
// gdb 6.3 does not produce any console output
|
// gdb 6.3 does not produce any console output
|
||||||
BreakHandler *handler = manager()->breakHandler();
|
BreakpointData *data = breakHandler()->findBreakpointByNumber(bpNumber);
|
||||||
BreakpointData *data = handler->findBreakpointByNumber(bpNumber);
|
|
||||||
if (response.resultClass == GdbResultDone && data) {
|
if (response.resultClass == GdbResultDone && data) {
|
||||||
QString msg = _(response.data.findChild("consolestreamoutput").data());
|
QString msg = _(response.data.findChild("consolestreamoutput").data());
|
||||||
//if (msg.contains(__("Will stop next time breakpoint"))) {
|
//if (msg.contains(__("Will stop next time breakpoint"))) {
|
||||||
@@ -2336,15 +2329,14 @@ void GdbEngine::handleBreakIgnore(const GdbResponse &response)
|
|||||||
//}
|
//}
|
||||||
// FIXME: this assumes it is doing the right thing...
|
// FIXME: this assumes it is doing the right thing...
|
||||||
data->bpIgnoreCount = data->ignoreCount;
|
data->bpIgnoreCount = data->ignoreCount;
|
||||||
handler->updateMarkers();
|
breakHandler()->updateMarkers();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void GdbEngine::handleBreakCondition(const GdbResponse &response)
|
void GdbEngine::handleBreakCondition(const GdbResponse &response)
|
||||||
{
|
{
|
||||||
int bpNumber = response.cookie.toInt();
|
int bpNumber = response.cookie.toInt();
|
||||||
BreakHandler *handler = manager()->breakHandler();
|
BreakpointData *data = breakHandler()->findBreakpointByNumber(bpNumber);
|
||||||
BreakpointData *data = handler->findBreakpointByNumber(bpNumber);
|
|
||||||
if (response.resultClass == GdbResultDone) {
|
if (response.resultClass == GdbResultDone) {
|
||||||
// We just assume it was successful. Otherwise we had to parse
|
// We just assume it was successful. Otherwise we had to parse
|
||||||
// the output stream data.
|
// the output stream data.
|
||||||
@@ -2359,7 +2351,7 @@ void GdbEngine::handleBreakCondition(const GdbResponse &response)
|
|||||||
data->bpCondition = data->condition;
|
data->bpCondition = data->condition;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
handler->updateMarkers();
|
breakHandler()->updateMarkers();
|
||||||
}
|
}
|
||||||
|
|
||||||
void GdbEngine::extractDataFromInfoBreak(const QString &output, BreakpointData *data)
|
void GdbEngine::extractDataFromInfoBreak(const QString &output, BreakpointData *data)
|
||||||
@@ -2426,8 +2418,7 @@ void GdbEngine::handleBreakInfo(const GdbResponse &response)
|
|||||||
// Old-style output for multiple breakpoints, presumably in a
|
// Old-style output for multiple breakpoints, presumably in a
|
||||||
// constructor.
|
// constructor.
|
||||||
const int bpNumber = response.cookie.toInt();
|
const int bpNumber = response.cookie.toInt();
|
||||||
const BreakHandler *handler = manager()->breakHandler();
|
BreakpointData *data = breakHandler()->findBreakpointByNumber(bpNumber);
|
||||||
BreakpointData *data = handler->findBreakpointByNumber(bpNumber);
|
|
||||||
if (data) {
|
if (data) {
|
||||||
QString str = QString::fromLocal8Bit(
|
QString str = QString::fromLocal8Bit(
|
||||||
response.data.findChild("consolestreamoutput").data());
|
response.data.findChild("consolestreamoutput").data());
|
||||||
@@ -2443,8 +2434,7 @@ void GdbEngine::handleInfoLine(const GdbResponse &response)
|
|||||||
// at address 0x80526aa <_Z10...+131> and ends at 0x80526b5
|
// at address 0x80526aa <_Z10...+131> and ends at 0x80526b5
|
||||||
// <_Z10testQStackv+142>.\n"
|
// <_Z10testQStackv+142>.\n"
|
||||||
const int bpNumber = response.cookie.toInt();
|
const int bpNumber = response.cookie.toInt();
|
||||||
const BreakHandler *handler = manager()->breakHandler();
|
BreakpointData *data = breakHandler()->findBreakpointByNumber(bpNumber);
|
||||||
BreakpointData *data = handler->findBreakpointByNumber(bpNumber);
|
|
||||||
if (!data)
|
if (!data)
|
||||||
return;
|
return;
|
||||||
QByteArray ba = response.data.findChild("consolestreamoutput").data();
|
QByteArray ba = response.data.findChild("consolestreamoutput").data();
|
||||||
@@ -2506,7 +2496,7 @@ void GdbEngine::attemptBreakpointSynchronization()
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
BreakHandler *handler = manager()->breakHandler();
|
BreakHandler *handler = breakHandler();
|
||||||
|
|
||||||
foreach (BreakpointData *data, handler->takeDisabledBreakpoints()) {
|
foreach (BreakpointData *data, handler->takeDisabledBreakpoints()) {
|
||||||
QByteArray bpNumber = data->bpNumber;
|
QByteArray bpNumber = data->bpNumber;
|
||||||
@@ -2753,10 +2743,8 @@ void GdbEngine::reloadSourceFilesInternal()
|
|||||||
|
|
||||||
void GdbEngine::selectThread(int index)
|
void GdbEngine::selectThread(int index)
|
||||||
{
|
{
|
||||||
ThreadsHandler *threadsHandler = manager()->threadsHandler();
|
threadsHandler()->setCurrentThread(index);
|
||||||
threadsHandler->setCurrentThread(index);
|
QList<ThreadData> threads = threadsHandler()->threads();
|
||||||
|
|
||||||
QList<ThreadData> threads = threadsHandler->threads();
|
|
||||||
QTC_ASSERT(index < threads.size(), return);
|
QTC_ASSERT(index < threads.size(), return);
|
||||||
int id = threads.at(index).id;
|
int id = threads.at(index).id;
|
||||||
showStatusMessage(tr("Retrieving data for stack view..."), 10000);
|
showStatusMessage(tr("Retrieving data for stack view..."), 10000);
|
||||||
@@ -2871,7 +2859,7 @@ void GdbEngine::handleStackListFrames(const GdbResponse &response)
|
|||||||
bool canExpand = !cookie.isFull
|
bool canExpand = !cookie.isFull
|
||||||
&& (n >= theDebuggerAction(MaximalStackDepth)->value().toInt());
|
&& (n >= theDebuggerAction(MaximalStackDepth)->value().toInt());
|
||||||
theDebuggerAction(ExpandStack)->setEnabled(canExpand);
|
theDebuggerAction(ExpandStack)->setEnabled(canExpand);
|
||||||
manager()->stackHandler()->setFrames(stackFrames, canExpand);
|
stackHandler()->setFrames(stackFrames, canExpand);
|
||||||
|
|
||||||
// We can't jump to any file if we don't have any frames.
|
// We can't jump to any file if we don't have any frames.
|
||||||
if (stackFrames.isEmpty())
|
if (stackFrames.isEmpty())
|
||||||
@@ -2895,7 +2883,7 @@ void GdbEngine::handleStackListFrames(const GdbResponse &response)
|
|||||||
// when reading the *stopped message.
|
// when reading the *stopped message.
|
||||||
bool jump = (m_isMacGdb || targetFrame != 0);
|
bool jump = (m_isMacGdb || targetFrame != 0);
|
||||||
|
|
||||||
manager()->stackHandler()->setCurrentIndex(targetFrame);
|
stackHandler()->setCurrentIndex(targetFrame);
|
||||||
if (jump || cookie.gotoLocation)
|
if (jump || cookie.gotoLocation)
|
||||||
activateFrame(targetFrame);
|
activateFrame(targetFrame);
|
||||||
}
|
}
|
||||||
@@ -2906,25 +2894,25 @@ void GdbEngine::activateFrame(int frameIndex)
|
|||||||
if (state() != InferiorStopped && state() != InferiorUnrunnable)
|
if (state() != InferiorStopped && state() != InferiorUnrunnable)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
StackHandler *stackHandler = manager()->stackHandler();
|
StackHandler *handler = stackHandler();
|
||||||
int oldIndex = stackHandler->currentIndex();
|
int oldIndex = handler->currentIndex();
|
||||||
|
|
||||||
if (frameIndex == stackHandler->stackSize()) {
|
if (frameIndex == handler->stackSize()) {
|
||||||
reloadFullStack();
|
reloadFullStack();
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
QTC_ASSERT(frameIndex < stackHandler->stackSize(), return);
|
QTC_ASSERT(frameIndex < handler->stackSize(), return);
|
||||||
|
|
||||||
if (oldIndex != frameIndex) {
|
if (oldIndex != frameIndex) {
|
||||||
// Assuming the command always succeeds this saves a roundtrip.
|
// Assuming the command always succeeds this saves a roundtrip.
|
||||||
// Otherwise the lines below would need to get triggered
|
// Otherwise the lines below would need to get triggered
|
||||||
// after a response to this -stack-select-frame here.
|
// after a response to this -stack-select-frame here.
|
||||||
stackHandler->setCurrentIndex(frameIndex);
|
handler->setCurrentIndex(frameIndex);
|
||||||
postCommand("-stack-select-frame " + QByteArray::number(frameIndex),
|
postCommand("-stack-select-frame " + QByteArray::number(frameIndex),
|
||||||
CB(handleStackSelectFrame));
|
CB(handleStackSelectFrame));
|
||||||
}
|
}
|
||||||
gotoLocation(stackHandler->currentFrame(), true);
|
gotoLocation(handler->currentFrame(), true);
|
||||||
}
|
}
|
||||||
|
|
||||||
void GdbEngine::handleStackSelectFrame(const GdbResponse &response)
|
void GdbEngine::handleStackSelectFrame(const GdbResponse &response)
|
||||||
@@ -2959,10 +2947,9 @@ void GdbEngine::handleThreadInfo(const GdbResponse &response)
|
|||||||
thread.lineNumber = frame.findChild("line").data().toInt();
|
thread.lineNumber = frame.findChild("line").data().toInt();
|
||||||
threads.append(thread);
|
threads.append(thread);
|
||||||
}
|
}
|
||||||
ThreadsHandler *threadsHandler = manager()->threadsHandler();
|
threadsHandler()->setThreads(threads);
|
||||||
threadsHandler->setThreads(threads);
|
|
||||||
int currentIndex = response.data.findChild("current-thread-id").data().toInt();
|
int currentIndex = response.data.findChild("current-thread-id").data().toInt();
|
||||||
threadsHandler->setCurrentThread(currentIndex);
|
threadsHandler()->setCurrentThread(currentIndex);
|
||||||
} else {
|
} else {
|
||||||
// Fall back for older versions: Try to get at least a list
|
// Fall back for older versions: Try to get at least a list
|
||||||
// of running threads.
|
// of running threads.
|
||||||
@@ -2988,9 +2975,8 @@ void GdbEngine::handleThreadListIds(const GdbResponse &response)
|
|||||||
currentIndex = index;
|
currentIndex = index;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
ThreadsHandler *threadsHandler = manager()->threadsHandler();
|
threadsHandler()->setThreads(threads);
|
||||||
threadsHandler->setThreads(threads);
|
threadsHandler()->setCurrentThread(currentIndex);
|
||||||
threadsHandler->setCurrentThread(currentIndex);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@@ -3021,8 +3007,8 @@ void GdbEngine::handleMakeSnapshot(const GdbResponse &response)
|
|||||||
SnapshotData snapshot;
|
SnapshotData snapshot;
|
||||||
snapshot.setDate(QDateTime::currentDateTime());
|
snapshot.setDate(QDateTime::currentDateTime());
|
||||||
snapshot.setLocation(response.cookie.toString());
|
snapshot.setLocation(response.cookie.toString());
|
||||||
snapshot.setFrames(manager()->stackHandler()->frames());
|
snapshot.setFrames(stackHandler()->frames());
|
||||||
manager()->snapshotHandler()->appendSnapshot(snapshot);
|
snapshotHandler()->appendSnapshot(snapshot);
|
||||||
} else {
|
} else {
|
||||||
QByteArray msg = response.data.findChild("msg").data();
|
QByteArray msg = response.data.findChild("msg").data();
|
||||||
showMessageBox(QMessageBox::Critical, tr("Snapshot Creation Error"),
|
showMessageBox(QMessageBox::Critical, tr("Snapshot Creation Error"),
|
||||||
@@ -3111,7 +3097,7 @@ void GdbEngine::reloadRegisters()
|
|||||||
|
|
||||||
void GdbEngine::setRegisterValue(int nr, const QString &value)
|
void GdbEngine::setRegisterValue(int nr, const QString &value)
|
||||||
{
|
{
|
||||||
Register reg = manager()->registerHandler()->registers().at(nr);
|
Register reg = runControl()->registerHandler()->registers().at(nr);
|
||||||
//qDebug() << "NOT IMPLEMENTED: CHANGE REGISTER " << nr << reg.name << ":"
|
//qDebug() << "NOT IMPLEMENTED: CHANGE REGISTER " << nr << reg.name << ":"
|
||||||
// << value;
|
// << value;
|
||||||
postCommand("-var-delete \"R@\"");
|
postCommand("-var-delete \"R@\"");
|
||||||
@@ -3134,7 +3120,7 @@ void GdbEngine::handleRegisterListNames(const GdbResponse &response)
|
|||||||
foreach (const GdbMi &item, response.data.findChild("register-names").children())
|
foreach (const GdbMi &item, response.data.findChild("register-names").children())
|
||||||
registers.append(Register(item.data()));
|
registers.append(Register(item.data()));
|
||||||
|
|
||||||
manager()->registerHandler()->setRegisters(registers);
|
runControl()->registerHandler()->setRegisters(registers);
|
||||||
|
|
||||||
if (m_gdbAdapter->isTrkAdapter())
|
if (m_gdbAdapter->isTrkAdapter())
|
||||||
m_gdbAdapter->trkReloadRegisters();
|
m_gdbAdapter->trkReloadRegisters();
|
||||||
@@ -3145,7 +3131,7 @@ void GdbEngine::handleRegisterListValues(const GdbResponse &response)
|
|||||||
if (response.resultClass != GdbResultDone)
|
if (response.resultClass != GdbResultDone)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
Registers registers = manager()->registerHandler()->registers();
|
Registers registers = runControl()->registerHandler()->registers();
|
||||||
|
|
||||||
// 24^done,register-values=[{number="0",value="0xf423f"},...]
|
// 24^done,register-values=[{number="0",value="0xf423f"},...]
|
||||||
const GdbMi values = response.data.findChild("register-values");
|
const GdbMi values = response.data.findChild("register-values");
|
||||||
@@ -3182,7 +3168,7 @@ void GdbEngine::handleRegisterListValues(const GdbResponse &response)
|
|||||||
reg.value = value;
|
reg.value = value;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
manager()->registerHandler()->setRegisters(registers);
|
runControl()->registerHandler()->setRegisters(registers);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@@ -3211,8 +3197,7 @@ QPoint GdbEngine::m_toolTipPos;
|
|||||||
|
|
||||||
bool GdbEngine::showToolTip()
|
bool GdbEngine::showToolTip()
|
||||||
{
|
{
|
||||||
WatchHandler *handler = manager()->watchHandler();
|
WatchModel *model = watchHandler()->model(TooltipsWatch);
|
||||||
WatchModel *model = handler->model(TooltipsWatch);
|
|
||||||
QByteArray iname = tooltipINameForExpression(m_toolTipExpression.toLatin1());
|
QByteArray iname = tooltipINameForExpression(m_toolTipExpression.toLatin1());
|
||||||
WatchItem *item = model->findItem(iname, model->rootItem());
|
WatchItem *item = model->findItem(iname, model->rootItem());
|
||||||
if (!item) {
|
if (!item) {
|
||||||
@@ -3310,8 +3295,8 @@ void GdbEngine::setToolTipExpression(const QPoint &mousePos,
|
|||||||
toolTip.exp = exp.toLatin1();
|
toolTip.exp = exp.toLatin1();
|
||||||
toolTip.name = exp;
|
toolTip.name = exp;
|
||||||
toolTip.iname = tooltipINameForExpression(toolTip.exp);
|
toolTip.iname = tooltipINameForExpression(toolTip.exp);
|
||||||
manager()->watchHandler()->removeData(toolTip.iname);
|
watchHandler()->removeData(toolTip.iname);
|
||||||
manager()->watchHandler()->insertData(toolTip);
|
watchHandler()->insertData(toolTip);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@@ -3340,7 +3325,7 @@ bool GdbEngine::hasDebuggingHelperForType(const QString &type) const
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (theDebuggerBoolSetting(DebugDebuggingHelpers)
|
if (theDebuggerBoolSetting(DebugDebuggingHelpers)
|
||||||
&& manager()->stackHandler()->isDebuggingDebuggingHelpers())
|
&& stackHandler()->isDebuggingDebuggingHelpers())
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
if (m_debuggingHelperState != DebuggingHelperAvailable)
|
if (m_debuggingHelperState != DebuggingHelperAvailable)
|
||||||
@@ -3426,7 +3411,7 @@ void GdbEngine::rebuildWatchModel()
|
|||||||
showMessage(currentTime(), LogMiscInput);
|
showMessage(currentTime(), LogMiscInput);
|
||||||
showMessage(_("<Rebuild Watchmodel %1>").arg(count), LogMiscInput);
|
showMessage(_("<Rebuild Watchmodel %1>").arg(count), LogMiscInput);
|
||||||
showStatusMessage(tr("Finished retrieving data"), 400);
|
showStatusMessage(tr("Finished retrieving data"), 400);
|
||||||
manager()->watchHandler()->endCycle();
|
watchHandler()->endCycle();
|
||||||
showToolTip();
|
showToolTip();
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -3479,7 +3464,7 @@ void GdbEngine::handleVarCreate(const GdbResponse &response)
|
|||||||
if (response.resultClass == GdbResultDone) {
|
if (response.resultClass == GdbResultDone) {
|
||||||
data.variable = data.iname;
|
data.variable = data.iname;
|
||||||
setWatchDataType(data, response.data.findChild("type"));
|
setWatchDataType(data, response.data.findChild("type"));
|
||||||
if (manager()->watchHandler()->isExpandedIName(data.iname)
|
if (runControl()->watchHandler()->isExpandedIName(data.iname)
|
||||||
&& !response.data.findChild("children").isValid())
|
&& !response.data.findChild("children").isValid())
|
||||||
data.setChildrenNeeded();
|
data.setChildrenNeeded();
|
||||||
else
|
else
|
||||||
@@ -3608,7 +3593,7 @@ void GdbEngine::insertData(const WatchData &data0)
|
|||||||
qDebug() << "BOGUS VALUE:" << data.toString();
|
qDebug() << "BOGUS VALUE:" << data.toString();
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
manager()->watchHandler()->insertData(data);
|
runControl()->watchHandler()->insertData(data);
|
||||||
}
|
}
|
||||||
|
|
||||||
void GdbEngine::assignValueInDebugger(const QString &expression, const QString &value)
|
void GdbEngine::assignValueInDebugger(const QString &expression, const QString &value)
|
||||||
|
@@ -2140,7 +2140,7 @@ void TrkGdbAdapter::trkReloadRegisters()
|
|||||||
{
|
{
|
||||||
// Take advantage of direct access to cached register values.
|
// Take advantage of direct access to cached register values.
|
||||||
QTC_ASSERT(m_snapshot.registerValid, /**/);
|
QTC_ASSERT(m_snapshot.registerValid, /**/);
|
||||||
RegisterHandler *handler = m_engine->manager()->registerHandler();
|
RegisterHandler *handler = m_engine->runControl()->registerHandler();
|
||||||
Registers registers = handler->registers();
|
Registers registers = handler->registers();
|
||||||
|
|
||||||
QTC_ASSERT(registers.size() >= 26,
|
QTC_ASSERT(registers.size() >= 26,
|
||||||
|
@@ -61,6 +61,14 @@ class DisassemblerViewAgent;
|
|||||||
class MemoryViewAgent;
|
class MemoryViewAgent;
|
||||||
class Symbol;
|
class Symbol;
|
||||||
class WatchData;
|
class WatchData;
|
||||||
|
class BreakHandler;
|
||||||
|
class ModulesHandler;
|
||||||
|
class RegisterHandler;
|
||||||
|
class StackHandler;
|
||||||
|
class SnapshotHandler;
|
||||||
|
class ThreadsHandler;
|
||||||
|
class WatchHandler;
|
||||||
|
|
||||||
|
|
||||||
class IDebuggerEngine : public QObject
|
class IDebuggerEngine : public QObject
|
||||||
{
|
{
|
||||||
@@ -138,9 +146,18 @@ public slots:
|
|||||||
void showMessage(const QString &msg, int channel = LogDebug, int timeout = -1) const;
|
void showMessage(const QString &msg, int channel = LogDebug, int timeout = -1) const;
|
||||||
void showStatusMessage(const QString &msg, int timeout = -1) const
|
void showStatusMessage(const QString &msg, int timeout = -1) const
|
||||||
{ showMessage(msg, StatusBar, timeout); }
|
{ showMessage(msg, StatusBar, timeout); }
|
||||||
|
|
||||||
|
public:
|
||||||
DebuggerManager *manager() const { return m_manager; }
|
DebuggerManager *manager() const { return m_manager; }
|
||||||
bool debuggerActionsEnabled() const;
|
bool debuggerActionsEnabled() const;
|
||||||
void showModuleSymbols(const QString &moduleName, const Symbols &symbols);
|
void showModuleSymbols(const QString &moduleName, const Symbols &symbols);
|
||||||
|
ModulesHandler *modulesHandler() const;
|
||||||
|
BreakHandler *breakHandler() const;
|
||||||
|
RegisterHandler *registerHandler() const;
|
||||||
|
StackHandler *stackHandler() const;
|
||||||
|
ThreadsHandler *threadsHandler() const;
|
||||||
|
WatchHandler *watchHandler() const;
|
||||||
|
SnapshotHandler *snapshotHandler() const;
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
DebuggerState state() const;
|
DebuggerState state() const;
|
||||||
|
Reference in New Issue
Block a user