【发布时间】: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.user,r再次退出并直接进入cut_hair_method()。 -
这是一个有效的问题,没有简单的答案。我也想配置简单易懂的启发式算法来自动
step into与step over取决于当前点是什么。也许是模块,也许是别的。大多数调试器都是可编写脚本的,在步骤后将测试附加到当前帧,如果您不喜欢它,则完成/返回。