Package: breakword
breakwordbreakwordis a small debugging utility that combines print debugging with breakpoint debugging. It aims to facilitate debugging the kind of problem where you might use print statements to quickly spot where something seems to be off, and then switch to a step by step debugger.breakwordnormally requires running your program twice and will only work properly if it is deterministic.How to useSet thePYTHONBREAKPOINTenvironment variable tobreakword.breakpoint.Usebreakpointlike aprintstatement:foriinrange(10):breakpoint(i)This will print out something like this:$ python example.py
⏎ standard 0
⏎ sound 1
⏎ character 2
⏎ thank 3
⏎ play 4
⏎ however 5
⏎ fish 6
⏎ cultural 7
⏎ either 8
⏎ and 9Use theBREAKWORDenvironment variable to set a breakpoint to what you want to investigate further. For instance, if you want to stop wheni == 6in the above program, you can run the following command:$ env BREAKWORD=fish python example.py
⏎ standard 0
⏎ sound 1
⏎ character 2
⏎ thank 3
⏎ play 4
⏎ however 5
⏎ fish 6
> example.py(2)<module>()
-> for i in range(10):
(Pdb) i
6You can also give a comma-separated list of words, e.g.BREAKWORD=sound,fish.Note:breakpoint()with no arguments retains the normal behavior.More functionsbreakword.log(*things, **config): Print a word and optionally other things after it.breakword.brk(watch=None, **config): Sets a breakpoint to trigger afterlogprinted out the given word. IfwatchisNoneor not given, theBREAKWORDenvironment variable is consulted. If the variable is not set, nothing will happen.This is equivalent tobreakword.after(word).breakpoint().breakword.after(watch=None, **config): Returns an object that evaluates toTrueright afterlogprinted out the given watch word. As withbrk, ifwatchisNoneor not given, theBREAKWORDenvironment variable is consulted.breakword.word(**config): Returns the next word as a string. You can print it yourself, in which case it's basically likelog, or you can store it in an object.breakword.logbrk(**config): Callslogand thenbrk.breakword.wordbrk(**config): Callswordand thenbrk. The word is returned.breakword.set_default_logger(logger): Set the logging function to use (defaults toprint)Tracking objectsbreakword.track(obj, all=False)will set thebreakwordattribute in the object to the next word in the list. By setting theBREAKWORDenvironment variable, you will set a breakpoint to the corresponding call totrack. Set theallargument toTrueand the attribute will contain a list. Note: this will not work ifobjis an integer or string, in those cases track will print a warning.breakword.track_creation(*classes)will set thebreakwordattribute on all instances of the given classes, when they are created. That way, you can set a breakpoint back to the creation of some object of interest.GroupsUsebreakword.groups.<name>to get a "word group" with the given name. Each group generates words independently and will therefore not interfere with each other. They havelog,brk,after,word, etc. as methods. The default group isgroups[""].frombreakwordimportgroupsassertgroups.aardvark==groups["aardvark"]# Log "a" in the aardvark groupgroups.aardvark.log("a")# Log "b" in the pelican groupgroups.pelican.log("b")# Get the next word in the pelican groupword=groups.pelican.word()# Conditional behavior to perform only after the word "cherry"ifgroups.pelican.after("cherry"):print("blah")