From: Willy Tarreau Date: Wed, 27 May 2026 16:49:51 +0000 (+0200) Subject: DEV: dev/gdb: add simple task dump X-Git-Tag: v3.4.0~23 X-Git-Url: http://git.ipfire.org/gitweb/index.cgi?a=commitdiff_plain;h=c82ac139f43938b5692d768bc9c2b530164d67a3;p=thirdparty%2Fhaproxy.git DEV: dev/gdb: add simple task dump 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. --- diff --git a/dev/gdb/task.gdb b/dev/gdb/task.gdb new file mode 100644 index 000000000..576d93198 --- /dev/null +++ b/dev/gdb/task.gdb @@ -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 +