bpo-29564:_PyMem_DumpTraceback() suggests enabling tracemalloc (GH-10510) (GH-10517)

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.
This commit is contained in:
Victor Stinner 2018-11-13 15:50:56 +01:00 committed by GitHub
parent 55b4771d5d
commit d57a3e5d03
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 10 additions and 0 deletions

View File

@ -468,6 +468,8 @@ class PyMemDebugTests(unittest.TestCase):
r" The block was made by call #[0-9]+ to debug malloc/realloc.\n" r" The block was made by call #[0-9]+ to debug malloc/realloc.\n"
r" Data at p: cb cb cb .*\n" r" Data at p: cb cb cb .*\n"
r"\n" r"\n"
r"Enable tracemalloc to get the memory block allocation traceback\n"
r"\n"
r"Fatal Python error: bad trailing pad byte") r"Fatal Python error: bad trailing pad byte")
regex = regex.format(ptr=self.PTR_REGEX) regex = regex.format(ptr=self.PTR_REGEX)
regex = re.compile(regex, flags=re.DOTALL) regex = re.compile(regex, flags=re.DOTALL)
@ -482,6 +484,8 @@ class PyMemDebugTests(unittest.TestCase):
r" The block was made by call #[0-9]+ to debug malloc/realloc.\n" r" The block was made by call #[0-9]+ to debug malloc/realloc.\n"
r" Data at p: cb cb cb .*\n" r" Data at p: cb cb cb .*\n"
r"\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") r"Fatal Python error: bad ID: Allocated using API 'm', verified using API 'r'\n")
regex = regex.format(ptr=self.PTR_REGEX) regex = regex.format(ptr=self.PTR_REGEX)
self.assertRegex(out, regex) self.assertRegex(out, regex)

View File

@ -1490,6 +1490,12 @@ _PyMem_DumpTraceback(int fd, const void *ptr)
traceback_t *traceback; traceback_t *traceback;
int i; int i;
if (!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); traceback = tracemalloc_get_traceback(DEFAULT_DOMAIN, (uintptr_t)ptr);
if (traceback == NULL) if (traceback == NULL)
return; return;