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.
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 details)
File details
Details for the file malloc_tracer-1.7.0.tar.gz.
File metadata
- Download URL: malloc_tracer-1.7.0.tar.gz
- Upload date:
- Size: 202.8 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via:
twine/3.3.0 pkginfo/1.6.1 requests/2.25.1 setuptools/41.2.0 requests-toolbelt/0.9.1 tqdm/4.55.1 CPython/3.8.3
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
94348e9513e6e4d0594e51e8524972ebad5f21029d85dae862271e37fa65b623
|
|
| MD5 |
7461f2975f54d93932e5b4ead6caf3bf
|
|
| BLAKE2b-256 |
593faeaadbdafb56eeea40551744ba6a311c7d9caf8ce616430df79a8c6886b6
|