debugger: Refactor breakpoint handling.

The breakpoints are now (fairly) tightly guarded by the BreakpointHandler.
Engines and Views are only supposed to refer to them by id. They also have
individual states now. The breakpoint data is split into a "user requested"
"fixed" part in BreakpointData and the engines' acknowledged data in a new
struct BreakpointResponse.

TODO: Move m_state and m_engine members to BreakpointResponse. Fix regressions
in the marker handling.
This commit is contained in:
hjk
2010-11-10 16:33:11 +01:00
parent 33bae0d784
commit 8ae541b36f
56 changed files with 2245 additions and 2057 deletions

View File

@@ -33,6 +33,7 @@
#include "debugger_global.h"
#include "debuggerconstants.h"
#include "moduleshandler.h" // For 'Symbols'
#include "breakpoint.h" // For 'BreakpointId'
#include <coreplugin/ssh/sshconnection.h>
@@ -116,11 +117,9 @@ DEBUGGER_EXPORT QDebug operator<<(QDebug str, DebuggerState state);
namespace Internal {
class DebuggerCore;
class DebuggerPluginPrivate;
class DisassemblerViewAgent;
class MemoryViewAgent;
class Symbol;
class WatchData;
class BreakHandler;
class ModulesHandler;
@@ -183,29 +182,24 @@ public:
virtual void createSnapshot();
virtual void updateAll();
virtual bool stateAcceptsBreakpointChanges() const { return true; }
virtual void attemptBreakpointSynchronization();
virtual bool acceptsBreakpoint(const Internal::BreakpointData *);
virtual void addBreakpoint(const Internal::BreakpointData &bp);
virtual void notifyAddBreakpointOk(quint64 id);
virtual void notifyAddBreakpointFailed(quint64 id);
virtual void removeBreakpoint(quint64 id);
virtual void notifyRemoveBreakpointOk(quint64 id);
virtual void notifyRemoveBreakpointFailed(quint64 id);
virtual void changeBreakpoint(const Internal::BreakpointData &bp);
virtual void notifyChangeBreakpointOk(quint64 id);
virtual void notifyChangeBreakpointFailed(quint64 id);
virtual void notifyBreakpointAdjusted(const Internal::BreakpointData &bp);
virtual void selectThread(int index);
virtual bool acceptsBreakpoint(BreakpointId id) const; // FIXME: make pure
virtual void insertBreakpoint(BreakpointId id); // FIXME: make pure
virtual void notifyBreakpointInsertOk(BreakpointId id);
virtual void notifyBreakpointInsertFailed(BreakpointId id);
virtual void removeBreakpoint(BreakpointId id); // FIXME: make pure
virtual void notifyBreakpointRemoveOk(BreakpointId id);
virtual void notifyBreakpointRemoveFailed(BreakpointId id);
virtual void changeBreakpoint(BreakpointId id); // FIXME: make pure
virtual void notifyBreakpointChangeOk(BreakpointId id);
virtual void notifyBreakpointChangeFailed(BreakpointId id);
virtual void assignValueInDebugger(const Internal::WatchData *data,
const QString &expr, const QVariant &value);
virtual void removeTooltip();
// Convenience
static QMessageBox *showMessageBox
(int icon, const QString &title, const QString &text, int buttons = 0);
virtual void selectThread(int index);
protected:
friend class Internal::DebuggerPluginPrivate;