Callback for sys.settrace
(self, frame, event, arg)
| 789 | self.disable() |
| 790 | |
| 791 | def trace_memory_usage(self, frame, event, arg): |
| 792 | """Callback for sys.settrace""" |
| 793 | if frame.f_code in self.code_map: |
| 794 | if event == 'call': |
| 795 | # "call" event just saves the lineno but not the memory |
| 796 | self.prevlines.append(frame.f_lineno) |
| 797 | elif event == 'line': |
| 798 | # trace needs current line and previous line |
| 799 | self.code_map.trace(frame.f_code, self.prevlines[-1], self.prev_lineno) |
| 800 | # saving previous line |
| 801 | self.prev_lineno = self.prevlines[-1] |
| 802 | self.prevlines[-1] = frame.f_lineno |
| 803 | elif event == 'return': |
| 804 | lineno = self.prevlines.pop() |
| 805 | self.code_map.trace(frame.f_code, lineno, self.prev_lineno) |
| 806 | self.prev_lineno = lineno |
| 807 | |
| 808 | if self._original_trace_function is not None: |
| 809 | self._original_trace_function(frame, event, arg) |
| 810 | |
| 811 | return self.trace_memory_usage |
| 812 | |
| 813 | def trace_max_mem(self, frame, event, arg): |
| 814 | # run into PDB as soon as memory is higher than MAX_MEM |