This is a debugging tool for tracing malloc that occurs inside a function or class.
Project description
malloc_tracer
About
This is a debugging tool for tracing malloc that occurs inside a function or class.
import numpy as np import malloc_tracer def func(x, y, z): dataset1 = np.empty((100, ), dtype=np.float64) print('x', x) dataset1 = np.empty((1000, ), dtype=np.float64) l = [i for i in range(100000)] if x == 0: dataset4a = np.empty((100000, ), dtype=np.float64) return 0 elif x == 1: dataset4b = np.empty((100000, ), dtype=np.float64) return 1 dataset3 = np.empty((3000, ), dtype=np.float64) return 2 tracer = malloc_tracer.Tracer(func)
This is equivalent to the following code.
import numpy as np from tracemalloc import start, take_snapshot, stop SNAPSHOT = None def func(x, y, z): try: start() dataset1 = np.empty((100,), dtype=np.float64) print('x', x) dataset1 = np.empty((1000,), dtype=np.float64) l = [i for i in range(100000)] if (x == 0): dataset4a = np.empty((100000,), dtype=np.float64) return 0 elif (x == 1): dataset4b = np.empty((100000,), dtype=np.float64) return 1 dataset3 = np.empty((3000,), dtype=np.float64) return 2 finally: global SNAPSHOT SNAPSHOT = take_snapshot() stop()
Feature
Compatibility
malloc_tracer works with Python 3.4 or higher.
Dependencies
Installation
pip install malloc-tracer
Usage
Trace a function.
import numpy as np import malloc_tracer def func(x, y, z): dataset1 = np.empty((100, ), dtype=np.float64) print('x', x) dataset1 = np.empty((1000, ), dtype=np.float64) l = [i for i in range(100000)] if x == 0: dataset4a = np.empty((100000, ), dtype=np.float64) return 0 elif x == 1: dataset4b = np.empty((100000, ), dtype=np.float64) return 1 dataset3 = np.empty((3000, ), dtype=np.float64) return 2
tracer = malloc_tracer.Tracer(func) tracer.trace( target_args=dict(x=1, y=2, z=3) )
usage1
Trace a method.
import numpy as np import malloc_tracer class Klass(object): CONSTANT = 'CONSTANT' def __init__(self, value): self._value = value def method(self, x): dataset1 = np.empty((100, ), dtype=np.float64) print('x', x) dataset1 = np.empty((1000, ), dtype=np.float64) l = [i for i in range(100000)] if x == 0: dataset4a = np.empty((100000, ), dtype=np.float64) return 0 elif x == 1: dataset4b = np.empty((100000, ), dtype=np.float64) return 1 dataset3 = np.empty((3000, ), dtype=np.float64) return 2 @staticmethod def smethod(): dataset = np.empty((100, ), dtype=np.float64) l = [i for i in range(100000)] print('Hello') return dataset @classmethod def cmethod(cls, var): return cls.CONSTANT + var
instance = Klass(1) tracer = malloc_tracer.Tracer(instance.method) tracer.trace( target_args=dict(x=1) )
usage2a
Trace a static method.
tracer = malloc_tracer.Tracer(Klass.smethod) tracer.trace( target_args=dict() )
usage2b
Trace a class method.
tracer = malloc_tracer.Tracer(Klass.cmethod) tracer.trace( target_args=dict(var='Hello world.') )
usage2c
Displays related traces for each file.
import numpy as np import malloc_tracer global_var1 = None global_var2 = None def func2(): global global_var1 global global_var2 global_var1 = np.empty((1000, ), dtype=np.float64) global_var2 = np.empty((10000, ), dtype=np.float64) def func(x, y, z): dataset1 = np.empty((100, ), dtype=np.float64) print('x', x) dataset1 = np.empty((1000, ), dtype=np.float64) l = [i for i in range(100000)] func2() if x == 0: dataset4a = np.empty((100000, ), dtype=np.float64) return 0 elif x == 1: dataset4b = np.empty((100000, ), dtype=np.float64) return 1 dataset3 = np.empty((3000, ), dtype=np.float64) return 2
tracer = malloc_tracer.Tracer(func) tracer.trace( target_args=dict(x=1, y=2, z=3), related_traces_output_mode=malloc_tracer.RelatedTracesOutputMode.FOR_EACH_FILE )
usage3a
Displays related traces in descending order.
tracer = malloc_tracer.Tracer(func) tracer.trace( target_args=dict(x=1, y=2, z=3), related_traces_output_mode=malloc_tracer.RelatedTracesOutputMode.IN_DESCENDING_ORDER )
usage3b
Convenience function.
malloc_tracer.trace( func, target_args=dict(x=1, y=2, z=3), related_traces_output_mode=malloc_tracer.RelatedTracesOutputMode.IN_DESCENDING_ORDER )
License
This software is released under the MIT License, see LICENSE.
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
malloc_tracer-1.7.0.tar.gz
(202.8 kB
view hashes)