summaryrefslogtreecommitdiffstats
path: root/Objects/object.c
diff options
context:
space:
mode:
Diffstat (limited to 'Objects/object.c')
-rw-r--r--Objects/object.c17
1 files changed, 16 insertions, 1 deletions
diff --git a/Objects/object.c b/Objects/object.c
index c876219..49b9839 100644
--- a/Objects/object.c
+++ b/Objects/object.c
@@ -2022,19 +2022,34 @@ _Py_Dealloc(PyObject *op)
(*dealloc)(op);
}
+/* Print all live objects. Because PyObject_Print is called, the
+ * interpreter must be in a healthy state.
+ */
void
_Py_PrintReferences(FILE *fp)
{
PyObject *op;
fprintf(fp, "Remaining objects:\n");
for (op = refchain._ob_next; op != &refchain; op = op->_ob_next) {
- fprintf(fp, "[%d] ", op->ob_refcnt);
+ fprintf(fp, "%p [%d] ", op, op->ob_refcnt);
if (PyObject_Print(op, fp, 0) != 0)
PyErr_Clear();
putc('\n', fp);
}
}
+/* Print the addresses of all live objects. Unlike _Py_PrintReferences, this
+ * doesn't make any calls to the Python C API, so is always safe to call.
+ */
+void
+_Py_PrintReferenceAddresses(FILE *fp)
+{
+ PyObject *op;
+ fprintf(fp, "Remaining object addresses:\n");
+ for (op = refchain._ob_next; op != &refchain; op = op->_ob_next)
+ fprintf(fp, "%p [%d]\n", op, op->ob_refcnt);
+}
+
PyObject *
_Py_GetObjects(PyObject *self, PyObject *args)
{