New submission from Dave Malcolm <dmalc...@redhat.com>: Modules/gcmodule.c contains various assertions which can fail due to reference counting errors elsewhere in either python, or an extension module. These can be difficult to track down.
In the hope of maximizing the information from crash reports, the attached patch (against py3k) introduces a new assertion macro to Objects/object.h and Objects.c, which provides a richer debug message. In particular, it identifies which object has the issue, and can more clearly spell out the problem. The patch replaces all uses of assert() in Modules/gcmodule.c for which a specific object has an issue (e.g. bogus reference count). The implementation may play somewhat fast-and-loose with rules about object invariants: you might have an only partially valid object, but the process is about to abort, so it seems acceptable to try to glean extra information on stderr. (This may turn an abort into a segfault, of course) Caveats: - exact name of the API probably could be better - I don't yet have a specific use for the "callback" idea; I was thinking of trying to display all objects that reference that object. Might need a void* closure to be useful. Might be a useless complication. - Only tested on gcc-4.4.3 so far; the __STRING(expr) and __PRETTY_FUNCTION__ look non-portable. - no test case; I thought about using ctypes to extract PyObject_IncRef from the implementation, but this is likely to lead to brittle test cases. Alternatively, is xxmodule to be used for this kind of thing? Thoughts? ---------- components: Interpreter Core files: py3k-repr-on-gcmodule-assertions.patch keywords: patch messages: 110341 nosy: dmalcolm priority: normal severity: normal stage: patch review status: open title: Try to print repr() when an C-level assert fails (in the garbage collector, beyond?) type: feature request versions: Python 3.2 Added file: http://bugs.python.org/file18007/py3k-repr-on-gcmodule-assertions.patch _______________________________________ Python tracker <rep...@bugs.python.org> <http://bugs.python.org/issue9263> _______________________________________ _______________________________________________ Python-bugs-list mailing list Unsubscribe: http://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com