如果我使用调试器,大多数时候我只想看看解释器在我的代码中做了什么。我想遍历我使用的框架和库的所有代码。
AFAIK 这被称为黑拳。
如何使用 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/
Python 调试器基类 (bdb.Bdb( 有一个 .skip 属性,给出要跳过的模块名称列表。可以在实例化调试器时或稍后提供此列表。如果要提供否定列表(您自己的模块列表(,或以其他方式计算是否应跳过模块,则可以对调试器类进行子类化并重写is_skipped_module。
从 PyCharm 版本 4.5 开始,有一个名为"步入我的代码"的功能: https://www.jetbrains.com/pycharm/whatsnew/#StepIntoCode
它有效。我的情况是,我只想进入我的代码(Django 应用程序(,而不是进入 django 本身的代码。默认快捷键很复杂(alt-shift-F7(,但很容易更改它。
相关问题:https://youtrack.jetbrains.com/issue/PY-14789