else:
support.wait_process(pid, exitcode=0)
+ def test_no_incomplete_frames(self):
+ tracemalloc.stop()
+ tracemalloc.start(8)
+
+ def f(x):
+ def g():
+ return x
+ return g
+
+ obj = f(0).__closure__[0]
+ traceback = tracemalloc.get_object_traceback(obj)
+ self.assertIn("test_tracemalloc", traceback[-1].filename)
+ self.assertNotIn("test_tracemalloc", traceback[-2].filename)
+
class TestSnapshot(unittest.TestCase):
maxDiff = 4000
}
_PyInterpreterFrame *pyframe = tstate->cframe->current_frame;
- for (; pyframe != NULL;) {
+ for (;;) {
+ while (pyframe && _PyFrame_IsIncomplete(pyframe)) {
+ pyframe = pyframe->previous;
+ }
+ if (pyframe == NULL) {
+ break;
+ }
if (traceback->nframe < _Py_tracemalloc_config.max_nframe) {
tracemalloc_get_frame(pyframe, &traceback->frames[traceback->nframe]);
assert(traceback->frames[traceback->nframe].filename != NULL);
traceback->total_nframe++;
}
- _PyInterpreterFrame *back = pyframe->previous;
- pyframe = back;
+ pyframe = pyframe->previous;
}
}