【问题标题】:Python Debugger which supports Black Boxing?支持黑盒的 Python 调试器?
【发布时间】:2014-12-11 08:35:45
【问题描述】:

如果我使用调试器,大多数时候我只想看看解释器在我的代码中做了什么。我想跳过我使用的框架和库的所有代码。

AFAIK 这被称为 Black Boxing

如何使用 Python ipdb 或其他 Python 调试器执行此操作?

想象一下:

我使用我信任的 orm 框架,但不想调试。

cut_hair_method(orm_object.user)

方法cut_hair_method()是我的,我要调试一下。

orm_object 来自我使用的框架。调试器将进入 orm-code 并做一些我不关心的特殊事情。我没办法告诉调试器:不要跳入orm代码!

更新

就我而言,很容易决定哪些代码应该在黑盒中,哪些代码不应该:$VIRTUAL_ENV/src/ 中的代码不在黑盒中,所有其他代码都在。除非我明确告诉调试器一些别的东西。

更新2

我的名字来自这篇文章的“黑拳”:https://hacks.mozilla.org/2013/08/new-features-of-firefox-developer-tools-episode-25/

【问题讨论】:

  • 任何好的调试器都会有“越过”命令。黑盒不仅仅是调试。黑盒是一个围绕如何测试(而不是调试)应用程序的想法。
  • 我添加了一个例子。 AFAIK“跨过”并非无处不在。
  • 如果这对你不起作用,而不是使用步进 - 为什么不在`cut_hair_method 中设置一个断点,然后运行......我似乎记得 IDLE IDE 有一个不通过的模块黑名单,但我似乎也记得它并没有很好地工作(当我几年前使用它时 - 我可能是错的)。
  • 只需使用 r 从 ORM 调用返回。这真的没那么难。 s 进入orm_object.userr 再次退出并直接进入cut_hair_method()
  • 这是一个有效的问题,没有简单的答案。我也想配置简单易懂的启发式算法来自动 step intostep over 取决于当前点是什么。也许是模块,也许是别的。大多数调试器都是可编写脚本的,在步骤后将测试附加到当前帧,如果您不喜欢它,则完成/返回。

标签: python debugging ipdb


【解决方案1】:

Python 调试器基类 (bdb.Bdb) 有一个 .skip 属性,提供要跳过的模块名称列表。您可以在实例化调试器时或稍后提供此列表。如果你想提供一个否定列表(你自己的模块列表),或者计算是否应该跳过一个模块,你可以继承调试器类并覆盖 is_skipped_module。

【讨论】:

    【解决方案2】:

    从 PyCharm 4.5 版开始,有一个名为“Step into my code”的功能:https://www.jetbrains.com/pycharm/whatsnew/#StepIntoCode

    它有效。我的情况是,我只想进入我的代码(Django 应用程序),而不是进入 django 本身的代码。默认快捷键很复杂(alt-shift-F7),但很容易更改。

    相关问题:https://youtrack.jetbrains.com/issue/PY-14789

    【讨论】:

      猜你喜欢
      • 2016-07-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-05-12
      • 2010-11-12
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多