On Oct 4, 2017, at 20:22, Yarko Tymciurak <[email protected]> wrote: > I've recently started using a simple conditional breakpoint in ipython, and > wonder if - in addition to Nick Coghlan's request for the env > 'PYTHONBREAKPOINT' (boolean?), it would make sense (I _think_ so) to add a > condition parameter to the breakpoint() call. This does raise several > questions, but it seems that it could make for a simple unified way to > conditionally call an arbitrary debugger. What I found useful (in the > contecxt of ipython - but general enough) you can see in this gist: > https://gist.github.com/yarko/bdaa9d3178a6db03e160fdbabb3a9885 > > If PEP 553's breakpoint() were to follow this sort of interface (with > "condition"), it raises a couple of questions: > - how would a missing (default) parameter be done? > - how would parameters to be passed to the debugger "of record" be passed in > (named tuple? - sort of ugly) > - would PYTHONBREAKPOINT be a global switch (I think yes), vs a `condition` > default. > > I have no dog in the fight, but to raise the possibility (?) of having PEP > 553 implement simple conditional breakpoint processing.
Thanks for bringing this up Yarko. I think this could be done with the current
specification for PEP 553 and an additional API from the various debuggers. I
don’t think it needs to be part of PEP 553 explicitly, given the additional
complications you describe above.
Remember that both built-in breakpoint() and sys.breakpointhook() accept *args,
**kws, and it is left up to the actual debugger API to interpret/accept those
additional arguments. So let’s say you wanted to implement this behavior with
pdb. I think you could do something as simple as:
def conditional_set_trace(*, condition=True):
if condition:
pdb.set_trace()
sys.breakpointhook = conditional_set_trace
Then in your code, you would just write:
def foo(value):
breakpoint(condition=(value < 0))
With the IPython gist you referenced, you wouldn’t even need that convenience
function. Just set sys.breakpointhook=conditional_breakpoint.breakpoint_ and
viola!
You could also PYTHONBREAKPOINT=conditional_breakpoint.breakpoint_ python3.7 …
and it should Just Work.
Cheers,
-Barry
signature.asc
Description: Message signed with OpenPGP
_______________________________________________ Python-Dev mailing list [email protected] https://mail.python.org/mailman/listinfo/python-dev Unsubscribe: https://mail.python.org/mailman/options/python-dev/archive%40mail-archive.com
