支持黑盒调试的Python调试器?

6
如果我使用调试器,大多数情况下我只想看看解释器在我的代码中做了什么。我想跳过我使用的框架和库的所有代码。
据我所知,这被称为黑盒化。
我该如何使用Python ipdb或其他Python调试器实现此目的?
想象一下:
我使用了一个我信任的ORM框架,不想进行调试。
cut_hair_method(orm_object.user)

这个cut_hair_method()方法是我自己的,我想要调试它。

orm_object来自于我使用的框架。调试器会进入orm代码并执行一些特殊的操作,但我并不关心。我无法告诉调试器:不要跳进orm代码!

更新

对于我的情况,很容易决定哪些代码应该在黑匣子中,哪些不应该:位于$VIRTUAL_ENV/src/目录下的代码不在黑匣子中,其他所有代码都在。除非我明确告诉调试器其他信息。

更新2

我从这篇文章中得知了“黑匣子”的名称:https://hacks.mozilla.org/2013/08/new-features-of-firefox-developer-tools-episode-25/


任何好的调试器都会有“跳过”命令。黑盒测试远不止于调试。黑盒测试是围绕如何测试(而不是调试)应用程序的一个理念。 - Tony Suffolk 66
我添加了一个例子。据我所知,“跨过”并非在所有地方都可行。 - guettli
1
如果step-over不适用于您,为什么不在“cut_hair_method”中设置断点,然后运行?我记得IDLE IDE有一个黑名单模块列表,不要逐个浏览,但我也记得它并不太好用(当我几年前使用它时 - 我可能是错误的)。 - Tony Suffolk 66
1
只需使用 r 从 ORM 调用中返回即可。这真的不难。将s传递到orm_object.user,再使用 r 即可直接进入 cut_hair_method() - Martijn Pieters
1
这是一个合理的问题,但并不容易回答。我也想配置简单易懂的启发式算法,根据当前点自动选择“步入”或“步过”。也许可以按模块划分,或者采用其他方式。大多数调试器都是可编写脚本的,可以在步进后将测试附加到当前帧,并在不喜欢时完成/返回。 - Dima Tisnek
显示剩余2条评论
2个回答

5

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


0

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接