gh-120144: Make it possible to use `sys.monitoring` for bdb and make it default for pdb by gaogaotiantian · Pull Request #124533 · python/cpython
So, for the same code, if you put a breakpoint at
print(cost), it should show the similar diff, andbreak_anywherechange won't affect it.
Yes it does! Massive improvement in this case!
the major problem is solves is when a line event is triggered multiple times
Could you please elaborate on how this is achieved?
When you say
quite the opposite, do you mean it's actually significant slower than the original solution? Do you have any examples?
One script I saw degradation of performance was the following:
from timeit import timeit class A(object): def __init__(self): self.value = 1 class B(A): @staticmethod def create_property(name): return property( lambda self: getattr(self.srg, name), lambda self, v: setattr(self.srg, name, v), ) value = create_property.__func__("value") def __init__(self): self.srg = __import__("threading").local() self.value = 2 super().__init__() b1 = B() b2 = B() print(timeit("b1.value = 4; c = b1.value", number=100000, globals=globals())) print(timeit("b1.v = 4; c = b1.v", number=100000, globals=globals()))
With a breakpoint in the last line, the monitoring-based Bdb takes 4 times as much time to reach it.
But let me add some more details about how I am testing. I am using a Bdb-based debugger in PyScripter, which is adapted for multi-treaded debugging. I am not using your modified bdb.py directly. Instead I created a subclass of Bdb integrating your code (see fastbdb.zip). Since, I wanted to back port your code to python 12 and 13, I replaced clear_tool_id with a custom function. Finally, since I am using the code for multi-threaded debugging, I have removed the changes in 99ea70c.
fastbdb.zip