Python 2.0
Michael Hudson
mwh21 at cam.ac.uk
Tue Jun 1 12:00:35 EDT 1999
On Tue, 1 Jun 1999, Stidolph, David wrote:
> Py_TRACE_REFS seems to be defined if Py_DEBUG is defined.
>
> I cannot find a "getobjects" or any other similar function in the source
> code or docs. I am using the Win32 version 1.5.2.
Well, Python/sysmodule.c in the source contains this:
static PyMethodDef sys_methods[] = {
/* Might as well keep this in alphabetic order */
{"exc_info", sys_exc_info, 0, exc_info_doc},
{"exit", sys_exit, 0, exit_doc},
#ifdef COUNT_ALLOCS
{"getcounts", sys_getcounts, 0},
#endif
#ifdef DYNAMIC_EXECUTION_PROFILE
{"getdxp", _Py_GetDXProfile, 1},
#endif
#ifdef Py_TRACE_REFS
{"getobjects", _Py_GetObjects, 1},
#endif
{"getrefcount", sys_getrefcount, 0, getrefcount_doc},
#ifdef USE_MALLOPT
{"mdebug", sys_mdebug, 0},
#endif
{"setcheckinterval", sys_setcheckinterval, 1,
setcheckinterval_doc},
{"setprofile", sys_setprofile, 0, setprofile_doc},
{"settrace", sys_settrace, 0, settrace_doc},
{NULL, NULL} /* sentinel */
};
and this:
#ifdef Py_TRACE_REFS
/* Defined in objects.c because it uses static globals if that file */
extern PyObject *_Py_GetObjects Py_PROTO((PyObject *, PyObject *));
#endif
and Objects/object.c contains:
PyObject *
_Py_GetObjects(self, args)
PyObject *self;
PyObject *args;
{
...
This is all on Linux, but the source is the source, as I understand it. I
mean the C source, not the Python Library source... I'd hoped that was
obvious.
I doubt it is documented anywhere - a quick grep through the docs finds
nowt, though Doc/api/api.tex contains the line:
XXX Explain Py_DEBUG, Py_TRACE_REFS, Py_REF_DEBUG.
I'd heard about it sometime on the newsgroup.
> Any help would be appreciated,
If this is what you were looking for, you're welcome.
Michael
> David Stidolph.
>
>
> -----Original Message-----
> From: Michael Hudson [mailto:mwh21 at cam.ac.uk]
> Sent: Tuesday, June 01, 1999 4:55 AM
> To: python-list at cwi.nl
> Subject: Re: Python 2.0
>
>
> "Stidolph, David" <stidolph at origin.ea.com> writes:
>
> > >OK, I'll try to propose something constructive. Maybe we need an object
> > >protocol, that would enumerate
> > >all references held by an object ? Writing a portable GC would be then
> > much
> > >easier.
> >
> > Sounds good to me for debugging. A call that could return a list of
> > everything that holds a reference to an object - that would be cool!
> >
> > list = GetReferences(object)
> > print 'List of referencest to',object
> > for item in list:
> > print 'item:',item
> >
> > Anybody know of a current way to do this?
>
> If you recompile Python with Py_TRACE_REFS defined, then the sys
> module sprouts a "getobjects" function that returns a list of all
> objects in existence. This could probably be used to implement
> something like this. It would be veeeeery slow, I suspect.
>
> I've never resorted to this approach, tending always to make cyclic
> references go away be staring at them very, very hard.
>
> I'm not sure this is at all what is being asked for, but it seems kind
> of relavent.
>
> Yours,
> Michael
>
More information about the Python-list
mailing list