• Victor Stinner's avatar
    bpo-9263: Dump Python object on GC assertion failure (GH-10062) · 626bff85
    Victor Stinner authored
    Changes:
    
    * Add _PyObject_AssertFailed() function.
    * Add _PyObject_ASSERT() and _PyObject_ASSERT_WITH_MSG() macros.
    * gc_decref(): replace assert() with _PyObject_ASSERT_WITH_MSG() to
      dump the faulty object if the assertion fails.
    
    _PyObject_AssertFailed() calls:
    
    * _PyMem_DumpTraceback(): try to log the traceback where the object
      memory has been allocated if tracemalloc is enabled.
    * _PyObject_Dump(): log repr(obj).
    * Py_FatalError(): log the current Python traceback.
    
    _PyObject_AssertFailed() uses _PyObject_IsFreed() heuristic to check
    if the object memory has been freed by a debug hook on Python memory
    allocators.
    
    Initial patch written by David Malcolm.
    Co-Authored-By: default avatarDavid Malcolm <dmalcolm@redhat.com>
    626bff85
gcmodule.c 60.5 KB