Kaydet (Commit) 524be305 authored tarafından Victor Stinner's avatar Victor Stinner

tracemalloc: Fix slicing traces and fix slicing a traceback.

üst 8f74a73e
...@@ -123,7 +123,6 @@ class TestTracemallocEnabled(unittest.TestCase): ...@@ -123,7 +123,6 @@ class TestTracemallocEnabled(unittest.TestCase):
self.assertEqual(len(traceback), 1) self.assertEqual(len(traceback), 1)
self.assertEqual(traceback, obj_traceback) self.assertEqual(traceback, obj_traceback)
def find_trace(self, traces, traceback): def find_trace(self, traces, traceback):
for trace in traces: for trace in traces:
if trace[1] == traceback._frames: if trace[1] == traceback._frames:
...@@ -147,7 +146,6 @@ class TestTracemallocEnabled(unittest.TestCase): ...@@ -147,7 +146,6 @@ class TestTracemallocEnabled(unittest.TestCase):
tracemalloc.stop() tracemalloc.stop()
self.assertEqual(tracemalloc._get_traces(), []) self.assertEqual(tracemalloc._get_traces(), [])
def test_get_traces_intern_traceback(self): def test_get_traces_intern_traceback(self):
# dummy wrappers to get more useful and identical frames in the traceback # dummy wrappers to get more useful and identical frames in the traceback
def allocate_bytes2(size): def allocate_bytes2(size):
...@@ -503,6 +501,14 @@ class TestSnapshot(unittest.TestCase): ...@@ -503,6 +501,14 @@ class TestSnapshot(unittest.TestCase):
self.assertEqual(str(stat), self.assertEqual(str(stat),
'a.py:5: size=5002 B (+5000 B), count=2 (+1), average=2501 B') 'a.py:5: size=5002 B (+5000 B), count=2 (+1), average=2501 B')
def test_slices(self):
snapshot, snapshot2 = create_snapshots()
self.assertEqual(snapshot.traces[:2],
(snapshot.traces[0], snapshot.traces[1]))
traceback = snapshot.traces[0].traceback
self.assertEqual(traceback[:2],
(traceback[0], traceback[1]))
class TestFilters(unittest.TestCase): class TestFilters(unittest.TestCase):
......
...@@ -182,8 +182,10 @@ class Traceback(Sequence): ...@@ -182,8 +182,10 @@ class Traceback(Sequence):
return len(self._frames) return len(self._frames)
def __getitem__(self, index): def __getitem__(self, index):
trace = self._frames[index] if isinstance(index, slice):
return Frame(trace) return tuple(Frame(trace) for trace in self._frames[index])
else:
return Frame(self._frames[index])
def __contains__(self, frame): def __contains__(self, frame):
return frame._frame in self._frames return frame._frame in self._frames
...@@ -259,8 +261,10 @@ class _Traces(Sequence): ...@@ -259,8 +261,10 @@ class _Traces(Sequence):
return len(self._traces) return len(self._traces)
def __getitem__(self, index): def __getitem__(self, index):
trace = self._traces[index] if isinstance(index, slice):
return Trace(trace) return tuple(Trace(trace) for trace in self._traces[index])
else:
return Trace(self._traces[index])
def __contains__(self, trace): def __contains__(self, trace):
return trace._trace in self._traces return trace._trace in self._traces
......
...@@ -16,6 +16,8 @@ Core and Builtins ...@@ -16,6 +16,8 @@ Core and Builtins
Library Library
------- -------
- tracemalloc: Fix slicing traces and fix slicing a traceback.
- Issue #20354: Fix an alignment issue in the tracemalloc module on 64-bit - Issue #20354: Fix an alignment issue in the tracemalloc module on 64-bit
platforms. Bug seen on 64-bit Linux when using "make profile-opt". platforms. Bug seen on 64-bit Linux when using "make profile-opt".
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment