Skip to main content

This is a debugging tool for tracing malloc that occurs inside a function or class.

Project description

License Build Status PyPI version

malloc_tracer

About

This is a debugging tool for tracing malloc that occurs inside a function or class.

import numpy as np
from malloc_tracer.tracer import *


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 = 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
from malloc_tracer.tracer import *


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 = Tracer(func)
tracer.trace(
    target_args=dict(x=1, y=2, z=3)
)
usage1

usage1

Trace a method.

import numpy as np
from malloc_tracer.tracer import *


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 = Tracer(instance.method)
tracer.trace(
    target_args=dict(x=1)
)
usage2a

usage2a

Trace a static method.

tracer = Tracer(Klass.smethod)
tracer.trace(
    target_args=dict()
)
usage2b

usage2b

Trace a class method.

tracer = Tracer(Klass.cmethod)
tracer.trace(
    target_args=dict(var='Hello world.')
)
usage2c

usage2c

License

This software is released under the MIT License, see LICENSE.

Project details


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.2.0.tar.gz (92.9 kB view hashes)

Uploaded Source

Built Distribution

malloc_tracer-1.2.0-py3-none-any.whl (6.3 kB view hashes)

Uploaded Python 3

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page