ObjWatch is a Python library for OOP debugging with nested tracing and configurable monitoring of modules, classes, members, methods, functions, globals, and locals, with multi-process support.
import time
import objwatch
from objwatch.wrappers import BaseWrapper
class SampleClass:
def __init__(self, value):
self.value = value
def increment(self):
self.value += 1
time.sleep(0.1)
def decrement(self):
self.value -= 1
time.sleep(0.1)
def main():
obj = SampleClass(10)
for _ in range(5):
obj.increment()
for _ in range(3):
obj.decrement()
if __name__ == '__main__':
# Using ObjWatch as a context manager
with objwatch.ObjWatch(['examples/example_usage.py'], output='./objwatch.log', wrapper=BaseWrapper):
main()
Targets:
>>>>>>>>>>
{}
<<<<<<<<<<
Filename targets:
>>>>>>>>>>
examples/example_usage.py
<<<<<<<<<<
Exclude filename targets:
>>>>>>>>>>
<<<<<<<<<<
wrapper 'BaseWrapper' loaded
Starting ObjWatch tracing.
Starting tracing.
37 run __main__.main <-
23 | run __main__.SampleClass.__init__ <- '0':(type)SampleClass, '1':10
23 | end __main__.SampleClass.__init__ -> None
25 | run __main__.SampleClass.increment <- '0':(type)SampleClass
14 | | upd SampleClass.value None -> 10
14 | | upd SampleClass.value 10 -> 11
25 | end __main__.SampleClass.increment -> None
25 | run __main__.SampleClass.increment <- '0':(type)SampleClass
14 | | upd SampleClass.value 11 -> 12
25 | end __main__.SampleClass.increment -> None
25 | run __main__.SampleClass.increment <- '0':(type)SampleClass
14 | | upd SampleClass.value 12 -> 13
25 | end __main__.SampleClass.increment -> None
25 | run __main__.SampleClass.increment <- '0':(type)SampleClass
14 | | upd SampleClass.value 13 -> 14
25 | end __main__.SampleClass.increment -> None
25 | run __main__.SampleClass.increment <- '0':(type)SampleClass
14 | | upd SampleClass.value 14 -> 15
25 | end __main__.SampleClass.increment -> None
27 | run __main__.SampleClass.decrement <- '0':(type)SampleClass
18 | | upd SampleClass.value 15 -> 14
27 | end __main__.SampleClass.decrement -> None
27 | run __main__.SampleClass.decrement <- '0':(type)SampleClass
18 | | upd SampleClass.value 14 -> 13
27 | end __main__.SampleClass.decrement -> None
27 | run __main__.SampleClass.decrement <- '0':(type)SampleClass
18 | | upd SampleClass.value 13 -> 12
27 | end __main__.SampleClass.decrement -> None
37 end __main__.main -> None
Stopping ObjWatch tracing.
Stopping tracing.