homepage

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.

Author louielu
Recipients louielu, ncoghlan
Date 2017年04月20日.09:36:32
SpamBayes Score -1.0
Marked as misclassified Yes
Message-id <1492680992.58.0.5244415067.issue30113@psf.upfronthosting.co.za>
In-reply-to
Content
This is a sub-problem of #9285, in #9285, we aim to provide cProfile and profile a context manager, this will need to add code like this:
 def __enter__(self):
 self.set_cmd('')
 sys.setprofile(self.dispatcher)
 return self
Unfortunately, when setting up profiler via `sys.setprofile`, it will immediately work on next line `return self`, which cause the assertion inside `trace_dispatch_return` claim this is a "Bad return".
Technically, `profile.Profile` can not go return upper than it's frame inside the frame stack. This behavior can be observed by this code:
 def fib(n):
 if n > 2:
 return fib(n - 1) + fib(n - 2)
 return n
 def foo():
 pr = profile.Profile()
 # Profile was set in the `foo` frame, it can't get more upper than this
 # that means, we can't return to global frame when this profile is set
 sys.setprofile(pr.dispatcher)
 fib(5)
 # We didn't stop the profile here via sys.setprofile(None)
 # So it will return 0xDEADBEAF to global frame and cause a bad return
 return 0xDEADBEAF
 foo()
Here this issue will provide the test of this behavior, then will make some modify in #9285 to prevent this situation when using profile as a context manager.
History
Date User Action Args
2017年04月20日 09:36:32louielusetrecipients: + louielu, ncoghlan
2017年04月20日 09:36:32louielusetmessageid: <1492680992.58.0.5244415067.issue30113@psf.upfronthosting.co.za>
2017年04月20日 09:36:32louielulinkissue30113 messages
2017年04月20日 09:36:32louielucreate

AltStyle によって変換されたページ (->オリジナル) /