public inbox for gdb-cvs@sourceware.org
help / color / mirror / Atom feed
* [binutils-gdb] gdbsupport: add observer_debug_printf, OBSERVER_SCOPED_DEBUG_ENTER_EXIT
@ 2021-04-24 23:33 Simon Marchi
  0 siblings, 0 replies; only message in thread
From: Simon Marchi @ 2021-04-24 23:33 UTC (permalink / raw)
  To: gdb-cvs

https://sourceware.org/git/gitweb.cgi?p=binutils-gdb.git;h=a8536c466a2705e17691970fbeb980121ac4a9f4

commit a8536c466a2705e17691970fbeb980121ac4a9f4
Author: Simon Marchi <simon.marchi@polymtl.ca>
Date:   Sat Apr 24 19:26:05 2021 -0400

    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

Diff:
---
 gdbsupport/ChangeLog    |  6 ++++++
 gdbsupport/observable.h | 30 ++++++++++++++++++++++++++----
 2 files changed, 32 insertions(+), 4 deletions(-)

diff --git a/gdbsupport/ChangeLog b/gdbsupport/ChangeLog
index 83416cff070..2734731328b 100644
--- a/gdbsupport/ChangeLog
+++ b/gdbsupport/ChangeLog
@@ -1,3 +1,9 @@
+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)
diff --git a/gdbsupport/observable.h b/gdbsupport/observable.h
index 5e7846f3f92..4ba47bb988f 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:


^ permalink raw reply	[flat|nested] only message in thread

only message in thread, other threads:[~2021-04-24 23:33 UTC | newest]

Thread overview: (only message) (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2021-04-24 23:33 [binutils-gdb] gdbsupport: add observer_debug_printf, OBSERVER_SCOPED_DEBUG_ENTER_EXIT Simon Marchi

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).