将断点与打印调试混合。

breakword的Python项目详细描述


断字

问题的描述

假设您的代码中有一个bug,但它并没有引发异常,您也不完全确定哪里出了问题,所以您开始用print语句来填充代码,以便了解发生了什么。

在某个时候你看到了一些不对劲。你想仔细调查一下。

然而,它似乎发生在某个循环的第174次迭代中,并且您不完全确定如何创建一个断点,在出错的地方触发,而不是以前。不清楚要为断点编写什么条件。你不知道该怎么做,除了打印更多的东西。

现在,如果您有两个命令:

  • breakword.log(),打印一些容易识别的单词的函数。
  • breakword.brk(word),一个在打印某个单词后中断的函数。

然后只运行一次脚本,看看单词potato后面发生了什么,然后设置一个断点在单词后面触发,然后再次运行脚本(希望脚本是确定的——如果不是,只有上帝能帮助你)。

这就是图书馆的基本功能。

最小努力API

PYTHONBREAKPOINT环境变量告诉python看到breakpoint()时要调用什么。你可以把它设置为breakword.logbrk来获得一些魔力。

BREAKWORD环境变量告诉breakword要中断哪个单词。如果未设置,则除非在python代码中显式指定,否则不会输入断点。

基本上,请执行以下操作:

# Install the library
pip install breakword
# Run the script without entering a breakpoint
env PYTHONBREAKPOINT=breakword.logbrk python yourscript.py
# Run the script and break on the word "fish"
env PYTHONBREAKPOINT=breakword.logbrk BREAKWORD=fish python yourscript.py

下面是一个屏幕截图,显示它的外观:

demo

稍微多一些努力api

  • breakword.log(*things, **config):打印一个单词,之后还可以选择打印其他内容。

  • breakword.brk(word=None, **config):设置在log打印出给定单词后触发的断点。如果wordNone或未给定,则会参考BREAKWORD环境变量。如果未设置变量,则不会发生任何事情。

    • 这相当于breakword.after(word).breakpoint()
  • breakword.after(word=None, **config):返回一个对象,该对象的计算结果为True,就在log打印出给定单词之后。与brk一样,如果wordNone或未给定,则会参考BREAKWORD环境变量。

  • breakword.word(**config):将下一个单词作为字符串返回。您可以自己打印它,在这种情况下,它基本上类似于log,或者您可以将它存储在一个对象中。

  • breakword.logbrk(**config):调用log,然后调用brk

  • breakword.wordbrk(**config):调用word,然后调用brk。这个词被退回。

  • breakword.set_default_logger(logger):设置要使用的日志记录函数(默认为print

demo

配置

logwordafterbrk都采用关键字参数:

  • group:表示单词“组”的字符串。每个组是独立的:^ {< CD38>}和^ {CD39>}不会相互干扰,因此可以在代码中添加更多^ ^ {CD11}}语句,而不必更改现有日志所打印的单词。

    • 你也可以做一些类似的事情:if after("fish"): log(group="xyz")。该语句将记录额外的单词,但仅在主序列中的“fish”之后。
    • 不同的群体(可能)会有不同的颜色,以帮助区分他们。
  • logger要使用的记录器。默认为默认记录器,即print

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
我们应该在测试java代码时模拟黄瓜测试吗。我们应该在多大程度上使用黄瓜?   Hibernate Weblogic 10.3.4 java。lang.NoSuchMethodError:javax/persistence/spi/PersistenceUnitInfo。getValidationMode()Ljavax/persistence/ValidationMode;   java如何在main()中访问私有静态实例变量   java JMockit无法模拟类的公共final字段   java是否可以返回特定控制器操作的输出(html)?   java如何返回正确类型的列表?   rest-OpenUI/Swagger-java-to-API   java组织。springframework。豆。工厂NoSuchBeanDefinitionException或加载ApplicationContext失败   java使用POST将参数从JSP发送到Servlet   java如何监听特定的按钮按下和主视图用户交互?   java如何让gradle在本地maven repo中覆盖库?   如何在Java中“合并”两个URI?   java如何制作一个方法来移动数组中的字符?   使用来自java的命令启动powershell窗口   java垃圾收集器和匿名类   java如何为CellTable(GWT 2.4)中的ImageResourceCell创建PanelPopup?