这是一个用于跟踪发生在函数或类内部的malloc的调试工具。
malloc-tracer的Python项目详细描述
LicenseBuild StatusPyPI versionPyversions
malloc_示踪剂
关于
这是一个用于跟踪发生在 函数或类。
importnumpyasnpimportmalloc_tracerdeffunc(x,y,z):dataset1=np.empty((100,),dtype=np.float64)print('x',x)dataset1=np.empty((1000,),dtype=np.float64)l=[iforiinrange(100000)]ifx==0:dataset4a=np.empty((100000,),dtype=np.float64)return0elifx==1:dataset4b=np.empty((100000,),dtype=np.float64)return1dataset3=np.empty((3000,),dtype=np.float64)return2tracer=malloc_tracer.Tracer(func)
这相当于下面的代码。
importnumpyasnpfromtracemallocimportstart,take_snapshot,stopSNAPSHOT=Nonedeffunc(x,y,z):try:start()dataset1=np.empty((100,),dtype=np.float64)print('x',x)dataset1=np.empty((1000,),dtype=np.float64)l=[iforiinrange(100000)]if(x==0):dataset4a=np.empty((100000,),dtype=np.float64)return0elif(x==1):dataset4b=np.empty((100000,),dtype=np.float64)return1dataset3=np.empty((3000,),dtype=np.float64)return2finally:globalSNAPSHOTSNAPSHOT=take_snapshot()stop()
功能
兼容性
malloc_tracer适用于python 3.4或更高版本。
依赖性
安装
pip install malloc-tracer
使用量
跟踪函数。
importnumpyasnpimportmalloc_tracerdeffunc(x,y,z):dataset1=np.empty((100,),dtype=np.float64)print('x',x)dataset1=np.empty((1000,),dtype=np.float64)l=[iforiinrange(100000)]ifx==0:dataset4a=np.empty((100000,),dtype=np.float64)return0elifx==1:dataset4b=np.empty((100000,),dtype=np.float64)return1dataset3=np.empty((3000,),dtype=np.float64)return2
tracer=malloc_tracer.Tracer(func)tracer.trace(target_args=dict(x=1,y=2,z=3))
用法1
跟踪一个方法。
importnumpyasnpimportmalloc_tracerclassKlass(object):CONSTANT='CONSTANT'def__init__(self,value):self._value=valuedefmethod(self,x):dataset1=np.empty((100,),dtype=np.float64)print('x',x)dataset1=np.empty((1000,),dtype=np.float64)l=[iforiinrange(100000)]ifx==0:dataset4a=np.empty((100000,),dtype=np.float64)return0elifx==1:dataset4b=np.empty((100000,),dtype=np.float64)return1dataset3=np.empty((3000,),dtype=np.float64)return2@staticmethoddefsmethod():dataset=np.empty((100,),dtype=np.float64)l=[iforiinrange(100000)]print('Hello')returndataset@classmethoddefcmethod(cls,var):returncls.CONSTANT+var
instance=Klass(1)tracer=malloc_tracer.Tracer(instance.method)tracer.trace(target_args=dict(x=1))
用法2a
跟踪静态方法。
tracer=malloc_tracer.Tracer(Klass.smethod)tracer.trace(target_args=dict())
用法2b
跟踪类方法。
tracer=malloc_tracer.Tracer(Klass.cmethod)tracer.trace(target_args=dict(var='Hello world.'))
用法2c
显示每个文件的相关跟踪。
importnumpyasnpimportmalloc_tracerglobal_var1=Noneglobal_var2=Nonedeffunc2():globalglobal_var1globalglobal_var2global_var1=np.empty((1000,),dtype=np.float64)global_var2=np.empty((10000,),dtype=np.float64)deffunc(x,y,z):dataset1=np.empty((100,),dtype=np.float64)print('x',x)dataset1=np.empty((1000,),dtype=np.float64)l=[iforiinrange(100000)]func2()ifx==0:dataset4a=np.empty((100000,),dtype=np.float64)return0elifx==1:dataset4b=np.empty((100000,),dtype=np.float64)return1dataset3=np.empty((3000,),dtype=np.float64)return2
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)
用法3A
按降序显示相关记录道。
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)
用法3b
便利功能。
malloc_tracer.trace(func,target_args=dict(x=1,y=2,z=3),related_traces_output_mode=malloc_tracer.RelatedTracesOutputMode.IN_DESCENDING_ORDER)
许可证
此软件是在麻省理工学院的许可下发布的,请参阅许可证。