[nemiver/gtk2-branch] Emit one IDebugger::breakpoint_set_signal per BP
- From: Dodji Seketeli <dodji src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [nemiver/gtk2-branch] Emit one IDebugger::breakpoint_set_signal per BP
- Date: Thu, 21 Apr 2011 22:30:25 +0000 (UTC)
commit 4a92d4e795c42da70c063c12dece70bfce54ed0d
Author: Dodji Seketeli <dodji gnome org>
Date: Thu Apr 21 19:17:52 2011 +0200
Emit one IDebugger::breakpoint_set_signal per BP
* src/dbgengine/nmv-i-debugger.h
(IDebugger::breakpoints_list_signal): Renamed
IDebugger::breakpoints_set_signal into this.
(IDebugger::breakpoint_set_signal): New interface.
(IDebugger::BreakpointSlot): Renamed IDebugger::BreakpointsSlot
typedef into this.
(IDebugger::set_breakpoint): Change signature of the callback slot
to pass just one breakpoint, instead of all the breakpoints.
* src/dbgengine/nmv-gdb-engine.h
(GDBEngine::breakpoints_list_signal): Renamed
GDBEngine::breakpoint_set_signal into this.
(GDBEngine::breakpoint_set_signal): New interface.
(GDBEngine::set_breakpoint): Change signature of the callback slot
to pass just one breakpoint, instead of all the breakpoints.
* src/dbgengine/nmv-gdb-engine.cc
(GDBEngine::breakpoints_list_signal): Renamed
GDBEngine::breakpoints_set_signal into this.
(GDBEngine::breakpoint_set_signal): New definition.
(GDBEngine::set_breakpoint): Change signature of the callback slot
to pass just one breakpoint, instead of all the breakpoints.
(OnBreakpointHandler::do_handle): Emit
IDebugger::breakpoint_set_signal whenever a breakpoint is set.
Avoid emitting IDebugger::breakpoints_list_signal when a
breakpoint is set. Also, adjust to call the close of
IDebugger::set_breakpoint back with only one breakpoint.
* src/persp/dbgperspective/nmv-breakpoints-view.cc
(BreakpointView::Priv::Priv): Update for rename to
IDebugger::breakpoints_list_signal. Connect to the new
IDebugger::breakpoint_set_signal.
(BreakpointView::Priv::on_debugger_breakpoint_set_signal): New
definition.
(BreakpointView::Priv::on_debugger_breakpoints_list_signal):
Renamed BreakpointView::Priv::on_debugger_breakpoints_set_signal
into this.
* src/persp/dbgperspective/nmv-dbg-perspective.cc
(DBGPerspective::on_debugger_breakpoint_set_signal): New
definition.
(DBGPerspective::on_debugger_breakpoints_list_signal): Renamed
DBGPerspective::on_debugger_breakpoints_set_signal into this.
(DBGPerspective::append_breakpoint): Remove useless first
parameter from this.
(DBGPerspective::init_debugger_signals): Connect to the new
IDebugger::breakpoint_set_signal. Update for renaming into
IDebugger::breakpoints_list_signal.
* tests/test-breakpoint.cc (test_main): Update for renaming into
IDebugger::breakpoints_list_signal.
* tests/test-var-path-expr.cc (test_main): Likewise.
* tests/test-watchpoint.cc (test_main): Likewise.
src/dbgengine/nmv-gdb-engine.cc | 56 +++++++++++++++++-----
src/dbgengine/nmv-gdb-engine.h | 9 +++-
src/dbgengine/nmv-i-debugger.h | 13 ++++-
src/persp/dbgperspective/nmv-breakpoints-view.cc | 29 +++++++++--
src/persp/dbgperspective/nmv-dbg-perspective.cc | 34 +++++++++----
tests/test-breakpoint.cc | 2 +-
tests/test-var-path-expr.cc | 2 +-
tests/test-watchpoint.cc | 4 +-
8 files changed, 110 insertions(+), 39 deletions(-)
---
diff --git a/src/dbgengine/nmv-gdb-engine.cc b/src/dbgengine/nmv-gdb-engine.cc
index ea95e89..8cdc886 100644
--- a/src/dbgengine/nmv-gdb-engine.cc
+++ b/src/dbgengine/nmv-gdb-engine.cc
@@ -242,7 +242,11 @@ public:
mutable sigc::signal<void,
const map<int, IDebugger::Breakpoint>&,
- const UString&> breakpoints_set_signal;
+ const UString&> breakpoints_list_signal;
+
+ mutable sigc::signal<void,
+ const std::pair<int, const IDebugger::Breakpoint&>&,
+ const UString& /*cookie*/> breakpoint_set_signal;
mutable sigc::signal<void,
const vector<OverloadsChoiceEntry>&,
@@ -1383,7 +1387,31 @@ struct OnBreakpointHandler: OutputHandler {
has_breaks = true;
}
- if (a_in.output ().has_result_record ()
+ if (has_breaks
+ && (a_in.command ().name () == "set-breakpoint"
+ || a_in.command ().name () == "set-countpoint")) {
+ // If we are getting this reply b/c we did set a
+ // breakpoint, then only one breakpoint should be reported
+ // back to us from GDB.
+ const map<int, IDebugger::Breakpoint> &bps =
+ a_in.output ().result_record ().breakpoints ();
+ THROW_IF_FAIL (bps.size () == 1);
+
+ std::pair<int,
+ const IDebugger::Breakpoint&> p (bps.begin ()->first,
+ bps.begin ()->second);
+
+ Command &c = a_in.command ();
+ if (c.name () == "set-breakpoint"
+ && c.has_slot ()) {
+ IDebugger::BreakpointSlot slot =
+ c.get_slot<IDebugger::BreakpointSlot> ();
+ slot (p);
+ }
+ m_engine->breakpoint_set_signal ().emit
+ (p, a_in.command ().cookie ());
+ m_engine->set_state (IDebugger::READY);
+ } else if (a_in.output ().has_result_record ()
&& a_in.output ().result_record ().kind ()
== Output::ResultRecord::DONE
&& a_in.command ().value ().find ("-break-delete")
@@ -1414,13 +1442,7 @@ struct OnBreakpointHandler: OutputHandler {
}
} else if (has_breaks) {
LOG_DD ("firing IDebugger::breakpoint_set_signal()");
- Command &c = a_in.command ();
- if (c.name () == "set-breakpoint"
- && c.has_slot ()) {
- IDebugger::BreakpointsSlot slot = c.get_slot<IDebugger::BreakpointsSlot> ();
- slot (m_engine->get_cached_breakpoints ());
- }
- m_engine->breakpoints_set_signal ().emit
+ m_engine->breakpoints_list_signal ().emit
(m_engine->get_cached_breakpoints (),
a_in.command ().cookie ());
m_engine->set_state (IDebugger::READY);
@@ -1681,7 +1703,7 @@ struct OnCommandDoneHandler : OutputHandler {
flag_breakpoint_as_countpoint (a_in.command ().tag2 (), false);
}
- m_engine->breakpoints_set_signal ().emit
+ m_engine->breakpoints_list_signal ().emit
(m_engine->get_cached_breakpoints (),
a_in.command ().cookie ());
}
@@ -3252,9 +3274,17 @@ GDBEngine::breakpoint_deleted_signal () const
}
sigc::signal<void, const map<int, IDebugger::Breakpoint>&, const UString&>&
-GDBEngine::breakpoints_set_signal () const
+GDBEngine::breakpoints_list_signal () const
+{
+ return m_priv->breakpoints_list_signal;
+}
+
+sigc::signal<void,
+ const std::pair<int, const IDebugger::Breakpoint&>&,
+ const UString& /*cookie*/>&
+GDBEngine::breakpoint_set_signal () const
{
- return m_priv->breakpoints_set_signal;
+ return m_priv->breakpoint_set_signal;
}
sigc::signal<void, const vector<IDebugger::OverloadsChoiceEntry>&, const UString&>&
@@ -3892,7 +3922,7 @@ void
GDBEngine::set_breakpoint (const Loc &a_loc,
const UString &a_condition,
gint a_ignore_count,
- const BreakpointsSlot &a_slot,
+ const BreakpointSlot &a_slot,
const UString &a_cookie)
{
LOG_FUNCTION_SCOPE_NORMAL_DD;
diff --git a/src/dbgengine/nmv-gdb-engine.h b/src/dbgengine/nmv-gdb-engine.h
index da48b39..f907081 100644
--- a/src/dbgengine/nmv-gdb-engine.h
+++ b/src/dbgengine/nmv-gdb-engine.h
@@ -70,7 +70,12 @@ public:
sigc::signal<void>& detached_from_target_signal () const;
sigc::signal<void, const map<int, IDebugger::Breakpoint>&, const UString&>&
- breakpoints_set_signal () const;
+ breakpoints_list_signal () const;
+
+ sigc::signal<void,
+ const std::pair<int, const IDebugger::Breakpoint&>&,
+ const UString& /*cookie*/>&
+ breakpoint_set_signal () const;
sigc::signal<void, const vector<OverloadsChoiceEntry>&, const UString&>&
got_overloads_choice_signal () const;
@@ -331,7 +336,7 @@ public:
void set_breakpoint (const Loc &a_loc,
const UString &a_condition,
gint a_ignore_count,
- const BreakpointsSlot &a_slot,
+ const BreakpointSlot &a_slot,
const UString &a_cookie);
void set_breakpoint (const UString &a_path,
diff --git a/src/dbgengine/nmv-i-debugger.h b/src/dbgengine/nmv-i-debugger.h
index eb75fbd..a2dbac9 100644
--- a/src/dbgengine/nmv-i-debugger.h
+++ b/src/dbgengine/nmv-i-debugger.h
@@ -822,7 +822,9 @@ public:
}
typedef sigc::slot<void> DefaultSlot;
- typedef sigc::slot<void, const map<int, IDebugger::Breakpoint>&> BreakpointsSlot;
+ typedef sigc::slot<void,
+ const std::pair<int, const IDebugger::Breakpoint&>&>
+ BreakpointSlot;
typedef sigc::slot<void, Loc&> LocSlot;
virtual ~IDebugger () {}
@@ -866,7 +868,12 @@ public:
virtual sigc::signal<void,
const map<int, IDebugger::Breakpoint>&,
const UString& /*cookie*/>&
- breakpoints_set_signal () const=0;
+ breakpoints_list_signal () const=0;
+
+ virtual sigc::signal<void,
+ const std::pair<int, const IDebugger::Breakpoint&>&,
+ const UString& /*cookie*/>&
+ breakpoint_set_signal () const = 0;
virtual sigc::signal<void,
const vector<OverloadsChoiceEntry>&,
@@ -1124,7 +1131,7 @@ public:
virtual void set_breakpoint (const common::Loc &a_loc,
const UString &a_condition,
gint a_ignore_count,
- const BreakpointsSlot &a_slot,
+ const BreakpointSlot &a_slot,
const UString &a_cookie = "") = 0;
virtual void set_breakpoint (const UString &a_path,
diff --git a/src/persp/dbgperspective/nmv-breakpoints-view.cc b/src/persp/dbgperspective/nmv-breakpoints-view.cc
index 641f1ac..cffb97e 100644
--- a/src/persp/dbgperspective/nmv-breakpoints-view.cc
+++ b/src/persp/dbgperspective/nmv-breakpoints-view.cc
@@ -117,15 +117,15 @@ public:
{
init_actions ();
build_tree_view ();
- void set_breakpoints
- (const std::map<int, IDebugger::Breakpoint> &a_breakpoints);
// update breakpoint list when debugger indicates that the list of
// breakpoints has changed.
debugger->breakpoint_deleted_signal ().connect (sigc::mem_fun
(*this, &Priv::on_debugger_breakpoint_deleted_signal));
- debugger->breakpoints_set_signal ().connect (sigc::mem_fun
- (*this, &Priv::on_debugger_breakpoints_set_signal));
+ debugger->breakpoint_set_signal ().connect
+ (sigc::mem_fun (*this, &Priv::on_debugger_breakpoint_set_signal));
+ debugger->breakpoints_list_signal ().connect (sigc::mem_fun
+ (*this, &Priv::on_debugger_breakpoints_list_signal));
debugger->stopped_signal ().connect (sigc::mem_fun
(*this, &Priv::on_debugger_stopped_signal));
breakpoints_menu = load_menu ("breakpointspopup.xml",
@@ -451,7 +451,8 @@ public:
}
}
- void on_debugger_breakpoints_set_signal
+ void
+ on_debugger_breakpoints_list_signal
(const map<int, IDebugger::Breakpoint> &a_breaks,
const UString &a_cookie)
{
@@ -515,7 +516,23 @@ public:
NEMIVER_CATCH
}
- bool on_breakpoints_view_button_press_signal (GdkEventButton *a_event)
+ void
+ on_debugger_breakpoint_set_signal
+ (const std::pair<int, const IDebugger::Breakpoint&> &a,
+ const UString &)
+ {
+ NEMIVER_TRY;
+
+ LOG_DD ("Adding breakpoint "
+ << a.second.number ());
+
+ append_breakpoint (a.second);
+
+ NEMIVER_CATCH;
+ }
+
+ bool
+ on_breakpoints_view_button_press_signal (GdkEventButton *a_event)
{
LOG_FUNCTION_SCOPE_NORMAL_DD;
bool handled = false;
diff --git a/src/persp/dbgperspective/nmv-dbg-perspective.cc b/src/persp/dbgperspective/nmv-dbg-perspective.cc
index 88ef7d0..0b27e98 100644
--- a/src/persp/dbgperspective/nmv-dbg-perspective.cc
+++ b/src/persp/dbgperspective/nmv-dbg-perspective.cc
@@ -326,7 +326,10 @@ private:
void on_debugger_command_done_signal (const UString &a_command_name,
const UString &a_cookie);
- void on_debugger_breakpoints_set_signal
+ void on_debugger_breakpoint_set_signal
+ (const std::pair<int, const IDebugger::Breakpoint&>&, const UString&);
+
+ void on_debugger_breakpoints_list_signal
(const map<int, IDebugger::Breakpoint> &,
const UString &a_cookie);
@@ -609,8 +612,7 @@ public:
void set_breakpoint (const Address &a_address,
bool a_is_count_point);
void set_breakpoint (const IDebugger::Breakpoint &a_breakpoint);
- void append_breakpoint (int a_bp_num,
- const IDebugger::Breakpoint &a_breakpoint);
+ void append_breakpoint (const IDebugger::Breakpoint &a_breakpoint);
void append_breakpoints
(const map<int, IDebugger::Breakpoint> &a_breaks);
@@ -2519,7 +2521,15 @@ DBGPerspective::on_debugger_command_done_signal (const UString &a_command,
}
void
-DBGPerspective::on_debugger_breakpoints_set_signal
+DBGPerspective::on_debugger_breakpoint_set_signal
+(const std::pair<int, const IDebugger::Breakpoint&> &a,
+ const UString&)
+{
+ append_breakpoint (a.second);
+}
+
+void
+DBGPerspective::on_debugger_breakpoints_list_signal
(const map<int, IDebugger::Breakpoint> &a_breaks,
const UString &a_cookie)
{
@@ -4083,8 +4093,11 @@ DBGPerspective::init_debugger_signals ()
debugger ()->command_done_signal ().connect (sigc::mem_fun
(*this, &DBGPerspective::on_debugger_command_done_signal));
- debugger ()->breakpoints_set_signal ().connect (sigc::mem_fun
- (*this, &DBGPerspective::on_debugger_breakpoints_set_signal));
+ debugger ()->breakpoint_set_signal ().connect (sigc::mem_fun
+ (*this, &DBGPerspective::on_debugger_breakpoint_set_signal));
+
+ debugger ()->breakpoints_list_signal ().connect (sigc::mem_fun
+ (*this, &DBGPerspective::on_debugger_breakpoints_list_signal));
debugger ()->breakpoint_deleted_signal ().connect (sigc::mem_fun
(*this, &DBGPerspective::on_debugger_breakpoint_deleted_signal));
@@ -6798,8 +6811,7 @@ DBGPerspective::set_breakpoint (const IDebugger::Breakpoint &a_breakpoint)
}
void
-DBGPerspective::append_breakpoint (int a_bp_num,
- const IDebugger::Breakpoint &a_breakpoint)
+DBGPerspective::append_breakpoint (const IDebugger::Breakpoint &a_breakpoint)
{
LOG_FUNCTION_SCOPE_NORMAL_DD;
@@ -6814,8 +6826,8 @@ DBGPerspective::append_breakpoint (int a_bp_num,
file_path = a_breakpoint.file_name ();
}
- m_priv->breakpoints[a_bp_num] = a_breakpoint;
- m_priv->breakpoints[a_bp_num].file_full_name (file_path);
+ m_priv->breakpoints[a_breakpoint.number ()] = a_breakpoint;
+ m_priv->breakpoints[a_breakpoint.number ()].file_full_name (file_path);
// We don't know how to graphically represent non-standard
// breakpoints (e.g watchpoints) at this moment.
@@ -6878,7 +6890,7 @@ DBGPerspective::append_breakpoints
map<int, IDebugger::Breakpoint>::const_iterator iter;
for (iter = a_breaks.begin (); iter != a_breaks.end (); ++iter)
- append_breakpoint (iter->first, iter->second);
+ append_breakpoint (iter->second);
}
const IDebugger::Breakpoint*
diff --git a/tests/test-breakpoint.cc b/tests/test-breakpoint.cc
index 43d6b1e..ae96214 100644
--- a/tests/test-breakpoint.cc
+++ b/tests/test-breakpoint.cc
@@ -216,7 +216,7 @@ test_main (int argc, char *argv[])
debugger->command_done_signal ().connect (&on_command_done_signal);
- debugger->breakpoints_set_signal ().connect
+ debugger->breakpoints_list_signal ().connect
(&on_breakpoints_set_signal);
debugger->running_signal ().connect (&on_running_signal);
diff --git a/tests/test-var-path-expr.cc b/tests/test-var-path-expr.cc
index df84727..0d871be 100644
--- a/tests/test-var-path-expr.cc
+++ b/tests/test-var-path-expr.cc
@@ -132,7 +132,7 @@ test_main (int argc, char *argv[])
debugger->program_finished_signal ().connect
(&on_program_finished_signal);
- debugger->breakpoints_set_signal ().connect
+ debugger->breakpoints_list_signal ().connect
(&on_breakpoints_set_signal);
debugger->stopped_signal ().connect (sigc::bind (&on_stopped_signal,
diff --git a/tests/test-watchpoint.cc b/tests/test-watchpoint.cc
index 845c620..755650e 100644
--- a/tests/test-watchpoint.cc
+++ b/tests/test-watchpoint.cc
@@ -94,8 +94,8 @@ test_main (int, char **)
debugger->program_finished_signal ().connect
(&on_program_finished_signal);
- debugger->breakpoints_set_signal ().connect
- (&on_breakpoints_set_signal);
+ debugger->breakpoints_list_signal ().connect
+ (&on_breakpoints_set_signal);
debugger->stopped_signal ().connect
(sigc::bind (&on_stopped_signal, debugger));
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]