#28485: Stack trace report silently drops frames without source code
---------------------------------------------+------------------------
Reporter: Martin von Gagern | Owner: (none)
Type: Bug | Status: new
Component: Error reporting | Version: master
Severity: Normal | Keywords:
Triage Stage: Unreviewed | Has patch: 1
Needs documentation: 0 | Needs tests: 0
Patch needs improvement: 0 | Easy pickings: 0
UI/UX: 0 |
---------------------------------------------+------------------------
Recently I encountered a strange situation: I got an exception for a bad
method signature, but the stack trace shown by Django in the error
response did not even mention the method in question. I added a
{{{traceback.print_exc()}}} to the last report function, and there on
standard error I could see some more frames. They were without source
code, but with file name, line number and method name. The reason why they
were without source code was that their source was not directly accessible
as a file on disk. They had been loaded via a custom loading procedure.
The fact that there was no indication at all in the report was quite
confusing.
In [https://github.com/django/django/pull/8880 GitHub #8880] I'm proposing
a fix for this. If we fail to load the source file, we no longer drop the
frame but present what information we have, namely file name, line number
and function name, plus a warning about the unavability of the source file
in place of the actual source test.
Note that having a [https://www.python.org/dev/peps/pep-0302/#optional-
extensions-to-the-importer-protocol PEP 302] {{{__loader__}}} to the
generated module to provide a {{{get_source}}} method is a way of
supporting source code even for generated or custom-loaded code, and it is
supported by Django. So this change here does not affect all generated or
custom-loaded code, only those parts which don't make use of such a
loader.
--
Ticket URL: <https://code.djangoproject.com/ticket/28485>
Django <https://code.djangoproject.com/>
The Web framework for perfectionists with deadlines.
--
You received this message because you are subscribed to the Google Groups
"Django updates" group.
To unsubscribe from this group and stop receiving emails from it, send an email
to [email protected].
To post to this group, send email to [email protected].
To view this discussion on the web visit
https://groups.google.com/d/msgid/django-updates/049.9b6a92537db1eec5a9ba4795051dab91%40djangoproject.com.
For more options, visit https://groups.google.com/d/optout.