diff options
author | Simon Marchi <simon.marchi@polymtl.ca> | 2021-04-24 19:26:05 -0400 |
---|---|---|
committer | Simon Marchi <simon.marchi@polymtl.ca> | 2021-04-24 19:26:41 -0400 |
commit | a8536c466a2705e17691970fbeb980121ac4a9f4 (patch) | |
tree | 32b346af7d60bb7ca410e1bf7576681675af5bb2 | |
parent | 0df0cce7c63c064e086deda7384a7dd82fefe228 (diff) | |
download | gdb-a8536c466a2705e17691970fbeb980121ac4a9f4.zip gdb-a8536c466a2705e17691970fbeb980121ac4a9f4.tar.gz gdb-a8536c466a2705e17691970fbeb980121ac4a9f4.tar.bz2 |
gdbsupport: add observer_debug_printf, OBSERVER_SCOPED_DEBUG_ENTER_EXIT
Switch observer to use the "new" debug printf mechanism and sprinkle a
few debug prints. Here's a small example of the output with "infrun"
and "observer" debug output enabled:
[infrun] proceed: enter
[observer] notify: start: observable target_resumed notify() called
[observer] notify: start: calling observer mi-interp of observable target_resumed
[observer] notify: end: calling observer mi-interp of observable target_resumed
[observer] notify: start: calling observer py-inferior of observable target_resumed
[observer] notify: end: calling observer py-inferior of observable target_resumed
[observer] notify: end: observable target_resumed notify() called
...
gdbsupport/ChangeLog:
* observable.h (observer_debug_printf,
OBSERVER_SCOPED_DEBUG_START_END): New.
(class observable) <notify, attach>: Use them.
Change-Id: If3ae4b6b65450ca3b7cae56698a87fc526688b86
-rw-r--r-- | gdbsupport/ChangeLog | 6 | ||||
-rw-r--r-- | gdbsupport/observable.h | 30 |
2 files changed, 32 insertions, 4 deletions
diff --git a/gdbsupport/ChangeLog b/gdbsupport/ChangeLog index 83416cf..2734731 100644 --- a/gdbsupport/ChangeLog +++ b/gdbsupport/ChangeLog @@ -1,5 +1,11 @@ 2021-04-24 Simon Marchi <simon.marchi@polymtl.ca> + * observable.h (observer_debug_printf, + OBSERVER_SCOPED_DEBUG_START_END): New. + (class observable) <notify, attach>: Use them. + +2021-04-24 Simon Marchi <simon.marchi@polymtl.ca> + * common-debug.h (struct scoped_debug_start_end) <scoped_debug_start_end>: Change start_msg/end_msg for start_prefix/end_prefix. Add format string parameter and make diff --git a/gdbsupport/observable.h b/gdbsupport/observable.h index 5e7846f..4ba47bb 100644 --- a/gdbsupport/observable.h +++ b/gdbsupport/observable.h @@ -24,6 +24,16 @@ #include <functional> #include <vector> +/* Print an "observer" debug statement. */ + +#define observer_debug_printf(fmt, ...) \ + debug_prefixed_printf_cond (observer_debug, "observer", fmt, ##__VA_ARGS__) + +/* Print "observer" start/end debug statements. */ + +#define OBSERVER_SCOPED_DEBUG_START_END(fmt, ...) \ + scoped_debug_start_end (observer_debug, "observer", fmt, ##__VA_ARGS__) + namespace gdb { @@ -85,6 +95,9 @@ public: lifetime must be at least as long as the observer is attached. */ void attach (const func_type &f, const char *name) { + observer_debug_printf ("Attaching observable %s to observer %s", + name, m_name); + m_observers.emplace_back (nullptr, f, name); } @@ -95,6 +108,9 @@ public: lifetime must be at least as long as the observer is attached. */ void attach (const func_type &f, const token &t, const char *name) { + observer_debug_printf ("Attaching observable %s to observer %s", + name, m_name); + m_observers.emplace_back (&t, f, name); } @@ -110,17 +126,23 @@ public: return o.token == &t; }); + observer_debug_printf ("Detaching observable %s from observer %s", + iter->name, m_name); + m_observers.erase (iter, m_observers.end ()); } /* Notify all observers that are attached to this observable. */ void notify (T... args) const { - if (observer_debug) - fprintf_unfiltered (gdb_stdlog, "observable %s notify() called\n", - m_name); + OBSERVER_SCOPED_DEBUG_START_END ("observable %s notify() called", m_name); + for (auto &&e : m_observers) - e.func (args...); + { + OBSERVER_SCOPED_DEBUG_START_END ("calling observer %s of observable %s", + e.name, m_name); + e.func (args...); + } } private: |