mirror of https://github.com/python/cpython
GH-106152: Add PY_THROW event to cProfile (GH-106161)
This commit is contained in:
parent
7b2d94d875
commit
cea9d4ea82
|
@ -66,6 +66,26 @@ class CProfileTest(ProfileTest):
|
|||
self.assertRaises(ValueError, pr2.enable)
|
||||
pr.disable()
|
||||
|
||||
def test_throw(self):
|
||||
"""
|
||||
gh-106152
|
||||
generator.throw() should trigger a call in cProfile
|
||||
In the any() call below, there should be two entries for the generator:
|
||||
* one for the call to __next__ which gets a True and terminates any
|
||||
* one when the generator is garbage collected which will effectively
|
||||
do a throw.
|
||||
"""
|
||||
pr = self.profilerclass()
|
||||
pr.enable()
|
||||
any(a == 1 for a in (1, 2))
|
||||
pr.disable()
|
||||
pr.create_stats()
|
||||
|
||||
for func, (cc, nc, _, _, _) in pr.stats.items():
|
||||
if func[2] == "<genexpr>":
|
||||
self.assertEqual(cc, 2)
|
||||
self.assertEqual(nc, 2)
|
||||
|
||||
|
||||
class TestCommandLine(unittest.TestCase):
|
||||
def test_sort(self):
|
||||
|
|
|
@ -0,0 +1 @@
|
|||
Added PY_THROW event hook for :mod:`cProfile` for generators
|
|
@ -678,6 +678,7 @@ static const struct {
|
|||
} callback_table[] = {
|
||||
{PY_MONITORING_EVENT_PY_START, "_pystart_callback"},
|
||||
{PY_MONITORING_EVENT_PY_RESUME, "_pystart_callback"},
|
||||
{PY_MONITORING_EVENT_PY_THROW, "_pystart_callback"},
|
||||
{PY_MONITORING_EVENT_PY_RETURN, "_pyreturn_callback"},
|
||||
{PY_MONITORING_EVENT_PY_YIELD, "_pyreturn_callback"},
|
||||
{PY_MONITORING_EVENT_PY_UNWIND, "_pyreturn_callback"},
|
||||
|
|
Loading…
Reference in New Issue