From: Victor Stinner Date: Tue, 13 Nov 2018 14:14:58 +0000 (+0100) Subject: bpo-29564:_PyMem_DumpTraceback() suggests enabling tracemalloc (GH-10510) X-Git-Tag: v3.8.0a1~503 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=f966e5397ed8f5c42c185223fc9b4d750a678d02;p=python bpo-29564:_PyMem_DumpTraceback() suggests enabling tracemalloc (GH-10510) If tracemalloc is not tracing Python memory allocations, _PyMem_DumpTraceback() now suggests to enable tracemalloc to get the traceback where the memory block has been allocated. --- diff --git a/Lib/test/test_capi.py b/Lib/test/test_capi.py index b3600ebe99..3c8c3f02bf 100644 --- a/Lib/test/test_capi.py +++ b/Lib/test/test_capi.py @@ -486,6 +486,8 @@ class PyMemDebugTests(unittest.TestCase): r" The block was made by call #[0-9]+ to debug malloc/realloc.\n" r" Data at p: cb cb cb .*\n" r"\n" + r"Enable tracemalloc to get the memory block allocation traceback\n" + r"\n" r"Fatal Python error: bad trailing pad byte") regex = regex.format(ptr=self.PTR_REGEX) regex = re.compile(regex, flags=re.DOTALL) @@ -500,6 +502,8 @@ class PyMemDebugTests(unittest.TestCase): r" The block was made by call #[0-9]+ to debug malloc/realloc.\n" r" Data at p: cb cb cb .*\n" r"\n" + r"Enable tracemalloc to get the memory block allocation traceback\n" + r"\n" r"Fatal Python error: bad ID: Allocated using API 'm', verified using API 'r'\n") regex = regex.format(ptr=self.PTR_REGEX) self.assertRegex(out, regex) diff --git a/Modules/_tracemalloc.c b/Modules/_tracemalloc.c index 1005f2ea4d..c5d5671032 100644 --- a/Modules/_tracemalloc.c +++ b/Modules/_tracemalloc.c @@ -1471,6 +1471,12 @@ _PyMem_DumpTraceback(int fd, const void *ptr) traceback_t *traceback; int i; + if (!_Py_tracemalloc_config.tracing) { + PUTS(fd, "Enable tracemalloc to get the memory block " + "allocation traceback\n\n"); + return; + } + traceback = tracemalloc_get_traceback(DEFAULT_DOMAIN, (uintptr_t)ptr); if (traceback == NULL) return;