在PyCharm中调试,如何进入项目而不进入Django库
想象一下这样的情况:
我在调试我的Django项目,逐行查看代码。有时候,调试器会进入Django的库或者其他外部库的代码。
有没有人知道怎么让调试器不进入这些外部代码?或者至少能有一个“跳出”的大步骤,让调试器回到我的项目代码里?
2 个回答
调试器看到的代码都是一样的,它分不清是你写的代码还是Django的代码——反正都是Python。所以它会运行所有的代码。不过,如果你想让它不要深入到那么底层,你需要选择“跳过”代码行,而不是“进入”代码行。
根据PyCharm的文档,当你看到一行代码,看起来可能会进入Django的内部时,你可以按F8
键。如果你不小心进入了Django的源代码,可以按Shift+F8
键,直到你出来为止。
有没有人知道怎么让调试器不进入外部代码呢?
有的,Dmitry Trofimov 知道;
(...) 你可以把不想追踪的模块添加到
DONT_TRACE
字典里,位置在<pycharm-distr>/helpers/pydev/pydevd.py
这算是一种小技巧 (...)
如果你想让这个功能看起来不那么“黑科技”,可以通过访问这个问题来投票支持它
PY-9101 实现“不要进入类”的选项给Python调试器
使用pdb的人可能会对这个功能感兴趣;
从Python 3.1开始,Pdb
类有了一个新的参数,叫做 skip
-
class pdb.Pdb(completekey='tab', stdin=None, stdout=None, skip=None, nosigint=False)
如果提供了skip参数,它必须是一个可以迭代的、符合通配符风格的模块名称模式。调试器将不会进入那些来自于匹配这些模式的模块的调用栈。 1
1 判断一个调用栈是否来自某个模块,是通过这个模块的
__name__
来决定的。
文档中的例子展示了如何跳过Django的包 -
import pdb; pdb.Pdb(skip=['django.*']).set_trace()