]> git.ipfire.org Git - thirdparty/haproxy.git/commitdiff
DEV: dev/gdb: add simple task dump
authorWilly Tarreau <w@1wt.eu>
Wed, 27 May 2026 16:49:51 +0000 (18:49 +0200)
committerWilly Tarreau <w@1wt.eu>
Mon, 1 Jun 2026 17:08:42 +0000 (19:08 +0200)
New functions task_dump_wq and task_dump_rq can be used to dump tasks
in a wait queue or in a run queue respectively. For the wait queue (the
most common usage), one needs to pass either the thread-local's timers,
or the thread group ones for shared tasks:

  task_dump_wq &ha_tgroup_ctx[0].timers
  task_dump_wq &ha_thread_ctx[0].timers

For the run queue, task_dump_rq will take the thread's rqueue:

  task_dump_rq &ha_thread_ctx[0].rqueue

The output is  the task pointer and a dump of the task* struct per line,
then a total count at the end.

dev/gdb/task.gdb [new file with mode: 0644]

diff --git a/dev/gdb/task.gdb b/dev/gdb/task.gdb
new file mode 100644 (file)
index 0000000..576d931
--- /dev/null
@@ -0,0 +1,31 @@
+# lists all tasks in the wait queue whose ebroot pointed to by $arg0
+# e.g.
+#   task_dump_wq &ha_tgroup_ctx[0].timers
+#   task_dump_wq &ha_thread_ctx[0].timers
+#
+define task_dump_rq
+   set $tot=0
+   ebtree_first ($arg0)
+   while ($node != 0)
+      set $tot = $tot+1
+      set $p = (struct task *)((void*)$node-(long)&((struct task*)0).rq)
+      printf "task %p ",$p
+      p -pretty off -- /a *$p
+      ebtree_next $node
+   end
+   printf "Total: %d tasks.\n",$tot
+end
+
+define task_dump_wq
+   set $tot=0
+   ebtree_first ($arg0)
+   while ($node != 0)
+      set $tot = $tot+1
+      set $p = (struct task *)((void*)$node-(long)&((struct task*)0).wq)
+      printf "task %p ",$p
+      p -pretty off -- /a *$p
+      ebtree_next $node
+   end
+   printf "Total: %d tasks.\n",$tot
+end
+