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)
)
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)
)
Trace a static method.
tracer = malloc_tracer.Tracer(Klass.smethod)
tracer.trace(
target_args=dict()
)
Trace a class method.
tracer = malloc_tracer.Tracer(Klass.cmethod)
tracer.trace(
target_args=dict(var='Hello world.')
)
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
)
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
)
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 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 |