diff options
author | Vito Caputo <vcaputo@pengaru.com> | 2025-01-01 16:21:13 -0800 |
---|---|---|
committer | Vito Caputo <vcaputo@pengaru.com> | 2025-01-01 19:32:12 -0800 |
commit | 99df2027777cb732918ca8aaaa5efcfd75b615d3 (patch) | |
tree | d07cf6a4d331a72ad2c5e0bbb54b5c053c86f8ac | |
parent | c2b495ecb3a0c42bd02398e3f70fb8112d8dbc29 (diff) |
libvmon: add vmon_dump_procs() debugging aid
It's handy to see what the libvmon hash table state of the world
is when trying to understand brokenness, but also as a tool for
verifying things aren't out of sync with what the hierarchical
view contains.
-rw-r--r-- | src/libvmon/vmon.c | 18 | ||||
-rw-r--r-- | src/libvmon/vmon.h | 2 |
2 files changed, 20 insertions, 0 deletions
diff --git a/src/libvmon/vmon.c b/src/libvmon/vmon.c index 4ce0974..69dc99b 100644 --- a/src/libvmon/vmon.c +++ b/src/libvmon/vmon.c @@ -1689,3 +1689,21 @@ int vmon_sample(vmon_t *vmon) return ret; } + + +void vmon_dump_procs(vmon_t *vmon, FILE *out) +{ + assert(vmon); + assert(out); + + fprintf(out, "generation=%i\n", vmon->generation); + for (int i = 0; i < VMON_HTAB_SIZE; i++) { + vmon_proc_t *proc; + + list_for_each_entry(proc, &vmon->htab[i], bucket) { + fprintf(out, "[%i] proc=%p parent=%p gen=%i pid=%i rc=%i is_threaded=%i is_thread=%i is_new=%u is_stale=%u\n", + i, proc, proc->parent, proc->generation, proc->pid, proc->refcnt, (unsigned)proc->is_threaded, (unsigned)proc->is_thread, (unsigned)proc->is_new, (unsigned)proc->is_stale); + + } + } +} diff --git a/src/libvmon/vmon.h b/src/libvmon/vmon.h index 325a44a..974d27f 100644 --- a/src/libvmon/vmon.h +++ b/src/libvmon/vmon.h @@ -4,6 +4,7 @@ #include <sys/types.h> #include <dirent.h> #include <stdint.h> +#include <stdio.h> /* just for vmon_dump_procs() */ #include <string.h> /* I use strcmp() in the type comparator definitions */ #include "bitmap.h" @@ -308,5 +309,6 @@ void vmon_destroy(vmon_t *); vmon_proc_t * vmon_proc_monitor(vmon_t *, vmon_proc_t *, int, vmon_proc_wants_t, void (*)(vmon_t *, void *, vmon_proc_t *, void *), void *); void vmon_proc_unmonitor(vmon_t *, vmon_proc_t *, void (*)(vmon_t *, void *, vmon_proc_t *, void *), void *); int vmon_sample(vmon_t *); +void vmon_dump_procs(vmon_t *vmon, FILE *out); #endif |