This issue tracker has been migrated to GitHub ,
and is currently read-only.
For more information,
see the GitHub FAQs in the Python's Developer Guide.
Created on 2007年11月17日 07:28 by cortesi, last changed 2022年04月11日 14:56 by admin. This issue is now closed.
| Files | ||||
|---|---|---|---|---|
| File name | Uploaded | Description | Edit | |
| generator-trace.patch | cortesi, 2007年11月17日 07:28 | |||
| Messages (4) | |||
|---|---|---|---|
| msg57598 - (view) | Author: Aldo Cortesi (cortesi) | Date: 2007年11月17日 07:28 | |
I rely heavily on a code coverage analysis engine I developed, and a bug in Python's trace functionality has been bothering me for years. Today I snapped, and finally tracked it down to a minimal test case. To see the problem, play with the following code: import sys def run(): yield 1 def trace(frame, event, arg): try: for i in []: pass except Exception, e: pass sys.settrace(trace) x = run() del x Remove the try clause, and re-run with a debug build of the interpreter for a different symptom. Add a print statement at the end to verify that the problem occurs when the generator object is deleted. The problem occurs due to an interaction between generators and the trace functionality. When a generator is deleted, the gen_del function calls gen_close, which then sets a GeneratorExit exception. Eventually, PyEval_EvalFrameEx is called, with the throwflag set. At this point the trace function is called, the GeneratorExit exception which is set causes problems with the FOR_ITER opcode, which then fails. The attached patch against trunk fixes this by storing exceptions before the call trace function is called, and restoring the exception afterwards. All regression tests pass for me with this patch applied. |
|||
| msg57604 - (view) | Author: Guido van Rossum (gvanrossum) * (Python committer) | Date: 2007年11月17日 15:49 | |
I think this was fixed in svn this week! See issue 1265. Let me know if your issue is different. |
|||
| msg57607 - (view) | Author: Aldo Cortesi (cortesi) | Date: 2007年11月17日 21:11 | |
Drat, you're right. This was fixed a few days ago by Amaury in http://svn.python.org/view?rev=58963&view=rev Another example of confluence - this bug has existed for a very long time. |
|||
| msg57608 - (view) | Author: Guido van Rossum (gvanrossum) * (Python committer) | Date: 2007年11月17日 22:27 | |
Thanks anyway! |
|||
| History | |||
|---|---|---|---|
| Date | User | Action | Args |
| 2022年04月11日 14:56:28 | admin | set | github: 45795 |
| 2007年11月17日 22:27:59 | gvanrossum | set | status: open -> closed resolution: duplicate superseder: pdb bug with "with" statement messages: + msg57608 |
| 2007年11月17日 21:11:44 | cortesi | set | messages: + msg57607 |
| 2007年11月17日 15:49:05 | gvanrossum | set | nosy:
+ gvanrossum messages: + msg57604 |
| 2007年11月17日 07:28:58 | cortesi | create | |