aboutsummaryrefslogtreecommitdiff
path: root/gdbsupport/observable.h
diff options
context:
space:
mode:
authorSimon Marchi <simon.marchi@polymtl.ca>2021-04-24 19:26:05 -0400
committerSimon Marchi <simon.marchi@polymtl.ca>2021-04-24 19:26:41 -0400
commita8536c466a2705e17691970fbeb980121ac4a9f4 (patch)
tree32b346af7d60bb7ca410e1bf7576681675af5bb2 /gdbsupport/observable.h
parent0df0cce7c63c064e086deda7384a7dd82fefe228 (diff)
downloadfsf-binutils-gdb-a8536c466a2705e17691970fbeb980121ac4a9f4.zip
fsf-binutils-gdb-a8536c466a2705e17691970fbeb980121ac4a9f4.tar.gz
fsf-binutils-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
Diffstat (limited to 'gdbsupport/observable.h')
-rw-r--r--gdbsupport/observable.h30
1 files changed, 26 insertions, 4 deletions
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: