From fc3e0de2fdb19b54e9f866ae42ff9b4b1c79a8fe Mon Sep 17 00:00:00 2001 From: Martin Nilsson <mani@lysator.liu.se> Date: Thu, 26 Aug 2004 05:35:38 +0200 Subject: [PATCH] Object counting code, mostly by mast. Rev: lib/modules/Debug.pmod/module.pmod:1.4 --- lib/modules/Debug.pmod/module.pmod | 24 +++++++++++++++++++++++- 1 file changed, 23 insertions(+), 1 deletion(-) diff --git a/lib/modules/Debug.pmod/module.pmod b/lib/modules/Debug.pmod/module.pmod index 42c42b40d0..7a79eeb67a 100644 --- a/lib/modules/Debug.pmod/module.pmod +++ b/lib/modules/Debug.pmod/module.pmod @@ -1,4 +1,4 @@ -// $Id: module.pmod,v 1.3 2002/11/27 21:14:05 nilsson Exp $ +// $Id: module.pmod,v 1.4 2004/08/26 03:35:38 nilsson Exp $ #pike __REAL_VERSION__ @@ -75,3 +75,25 @@ constant reset_dmalloc = _reset_dmalloc; #if constant(_verify_internals) constant verify_internals = _verify_internals; #endif + +//! Returns the number of objects of every kind in memory. +mapping(string:int) count_objects() { + int orig_enabled = Pike.gc_parameters()->enabled; + Pike.gc_parameters( (["enabled":0]) ); + + mapping(string:int) ret = ([]); + + object obj = next_object(); + // while( zero_type(_prev(obj)) ) obj=_prev(obj); + while(1) { + object next_obj; + if(catch(next_obj=_next(obj))) break; + string p = sprintf("%O",object_program(obj)); + sscanf(p, "object_program(%s)", p); + ret[p]++; + obj = next_obj; + } + + Pike.gc_parameters( (["enabled":orig_enabled]) ); + return ret; +} -- GitLab