[Python-checkins] cpython: Issue #23034: The output of a special Python build with defined COUNT_ALLOCS,

serhiy.storchaka python-checkins at python.org
Sun Jul 3 14:04:19 EDT 2016


https://hg.python.org/cpython/rev/cd911e06bf6c
changeset: 102250:cd911e06bf6c
user: Serhiy Storchaka <storchaka at gmail.com>
date: Sun Jul 03 21:03:53 2016 +0300
summary:
 Issue #23034: The output of a special Python build with defined COUNT_ALLOCS,
SHOW_ALLOC_COUNT or SHOW_TRACK_COUNT macros is now off by default. It can
be re-enabled using the "-X showalloccount" option. It now outputs to stderr
instead of stdout.
files:
 Doc/using/cmdline.rst | 5 +++++
 Doc/whatsnew/3.6.rst | 10 ++++++++++
 Misc/NEWS | 5 +++++
 Objects/listobject.c | 10 ++++++++++
 Objects/object.c | 9 +++++++++
 Objects/tupleobject.c | 10 ++++++++++
 Python/pylifecycle.c | 2 +-
 7 files changed, 50 insertions(+), 1 deletions(-)
diff --git a/Doc/using/cmdline.rst b/Doc/using/cmdline.rst
--- a/Doc/using/cmdline.rst
+++ b/Doc/using/cmdline.rst
@@ -397,6 +397,8 @@
 stored in a traceback of a trace. Use ``-X tracemalloc=NFRAME`` to start
 tracing with a traceback limit of *NFRAME* frames. See the
 :func:`tracemalloc.start` for more information.
+ * ``-X showalloccount`` to enable the output of the total count of allocated
+ objects for each type (only works when built with ``COUNT_ALLOCS`` defined);
 
 It also allows passing arbitrary values and retrieving them through the
 :data:`sys._xoptions` dictionary.
@@ -410,6 +412,9 @@
 .. versionadded:: 3.4
 The ``-X showrefcount`` and ``-X tracemalloc`` options.
 
+ .. versionadded:: 3.6
+ The ``-X showalloccount`` option.
+
 
 Options you shouldn't use
 ~~~~~~~~~~~~~~~~~~~~~~~~~
diff --git a/Doc/whatsnew/3.6.rst b/Doc/whatsnew/3.6.rst
--- a/Doc/whatsnew/3.6.rst
+++ b/Doc/whatsnew/3.6.rst
@@ -646,6 +646,16 @@
 This section lists previously described changes and other bugfixes
 that may require changes to your code.
 
+Changes in 'python' Command Behavior
+------------------------------------
+
+* The output of a special Python build with defined ``COUNT_ALLOCS``,
+ ``SHOW_ALLOC_COUNT`` or ``SHOW_TRACK_COUNT`` macros is now off by
+ default. It can be re-enabled using the ``-X showalloccount`` option.
+ It now outputs to ``stderr`` instead of ``stdout``.
+ (Contributed by Serhiy Storchaka in :issue:`23034`.)
+
+
 Changes in the Python API
 -------------------------
 
diff --git a/Misc/NEWS b/Misc/NEWS
--- a/Misc/NEWS
+++ b/Misc/NEWS
@@ -10,6 +10,11 @@
 Core and Builtins
 -----------------
 
+- Issue #23034: The output of a special Python build with defined COUNT_ALLOCS,
+ SHOW_ALLOC_COUNT or SHOW_TRACK_COUNT macros is now off by default. It can
+ be re-enabled using the "-X showalloccount" option. It now outputs to stderr
+ instead of stdout.
+
 - Issue #27443: __length_hint__() of bytearray itearator no longer return
 negative integer for resized bytearray.
 
diff --git a/Objects/listobject.c b/Objects/listobject.c
--- a/Objects/listobject.c
+++ b/Objects/listobject.c
@@ -82,6 +82,16 @@
 static void
 show_alloc(void)
 {
+ PyObject *xoptions, *value;
+ _Py_IDENTIFIER(showalloccount);
+
+ xoptions = PySys_GetXOptions();
+ if (xoptions == NULL)
+ return;
+ value = _PyDict_GetItemId(xoptions, &PyId_showalloccount);
+ if (value != Py_True)
+ return;
+
 fprintf(stderr, "List allocations: %" PY_FORMAT_SIZE_T "d\n",
 count_alloc);
 fprintf(stderr, "List reuse through freelist: %" PY_FORMAT_SIZE_T
diff --git a/Objects/object.c b/Objects/object.c
--- a/Objects/object.c
+++ b/Objects/object.c
@@ -109,6 +109,15 @@
 dump_counts(FILE* f)
 {
 PyTypeObject *tp;
+ PyObject *xoptions, *value;
+ _Py_IDENTIFIER(showalloccount);
+
+ xoptions = PySys_GetXOptions();
+ if (xoptions == NULL)
+ return;
+ value = _PyDict_GetItemId(xoptions, &PyId_showalloccount);
+ if (value != Py_True)
+ return;
 
 for (tp = type_list; tp; tp = tp->tp_next)
 fprintf(f, "%s alloc'd: %" PY_FORMAT_SIZE_T "d, "
diff --git a/Objects/tupleobject.c b/Objects/tupleobject.c
--- a/Objects/tupleobject.c
+++ b/Objects/tupleobject.c
@@ -36,6 +36,16 @@
 static void
 show_track(void)
 {
+ PyObject *xoptions, *value;
+ _Py_IDENTIFIER(showalloccount);
+
+ xoptions = PySys_GetXOptions();
+ if (xoptions == NULL)
+ return;
+ value = _PyDict_GetItemId(xoptions, &PyId_showalloccount);
+ if (value != Py_True)
+ return;
+
 fprintf(stderr, "Tuples created: %" PY_FORMAT_SIZE_T "d\n",
 count_tracked + count_untracked);
 fprintf(stderr, "Tuples tracked by the GC: %" PY_FORMAT_SIZE_T
diff --git a/Python/pylifecycle.c b/Python/pylifecycle.c
--- a/Python/pylifecycle.c
+++ b/Python/pylifecycle.c
@@ -626,7 +626,7 @@
 
 /* Debugging stuff */
 #ifdef COUNT_ALLOCS
- dump_counts(stdout);
+ dump_counts(stderr);
 #endif
 /* dump hash stats */
 _PyHash_Fini();
-- 
Repository URL: https://hg.python.org/cpython


More information about the Python-checkins mailing list

AltStyle によって変換されたページ (->オリジナル) /