【问题标题】:Debugging with pycharm, how to step into project, without entering django libraries用pycharm调试,如何步入项目,无需进入django库
【发布时间】:2013-02-16 08:34:49
【问题描述】:

想想这个场景:

我调试我的 Django 项目并逐步执行代码(进出)。调试器有时会进入 Django 库或其他外部库。

有谁知道如何防止调试器输入外部代码?或者至少是“大”一步让调试器回到项目代码?

【问题讨论】:

标签: python django debugging pycharm


【解决方案1】:

有谁知道如何防止调试器输入外部代码?

是的,德米特里·特罗菲莫夫knows

(...) 将您不想跟踪的模块添加到 <pycharm-distr>/helpers/pydev/pydevd.py 中的字典 DONT_TRACE
这是一个 hacky 解决方案 (...)

如果您希望此功能不那么 hacky,您可以通过访问 issue
PY-9101 Implement "Do not step into the classes" option for Python debugger 对其进行投票


使用 pdb 的人可能有兴趣知道 pdb 中有这样的功能;

从 Python 3.1 开始,Pdb 类有一个名为 skip 的新参数 -

class pdb.Pdb(completekey='tab', stdin=None, stdout=None, skip=None, nosigint=False)

skip 参数,如果给定,必须是一个可迭代的 glob 样式模块 名称模式。调试器不会进入源自的帧 在与这些模式之一匹配的模块中。 1

1帧是否被认为来自某个模块是 由框架全局变量中的__name__ 确定。

文档中给出的示例显示了如何跳过 Django 的包 -

import pdb; pdb.Pdb(skip=['django.*']).set_trace()

【讨论】:

    【解决方案2】:

    在调试器看来一切都是一样的,它无法区分您的代码或 Django 的代码——它都是 Python。所以它会运行所有东西,但是如果你想阻止它钻到这么低的地方,你就必须开始“越过”代码行,而不是“进入”它们。

    根据PyCharm docs,当您看到一行代码看起来像是进入 Django 内部的通道时,您会想要使用F8。如果你不小心发现自己在 Django 的源代码中,你可以点击 Shift+F8 直到你离开它。

    【讨论】:

    • 谢谢大家的回答!确实 Shift+F8 是我迄今为止使用的,我只是觉得它很乏味而且浪费时间。虽然偶尔我会看 Django 的代码,但大部分时间我都会看我的项目。也许它将成为 PyCharm 未来版本中的一个功能。
    • 它不会成为未来版本的功能,因为它不是必需的。断点和跨行代码已经解决了这个问题。
    • 它无法区分你的代码还是 Django 的代码 通过设置断点,你可以告诉调试器在哪里停止。为什么你认为没有办法告诉调试器不要停止?请参阅问题How can I configure Qt Creator and/or gdb so that while debugging my program using Qt libraries the debugger would avoid stepping into Qt's source files?,它表明gdb 中有这样的机制。如果一个调试器具有此功能,其他调试器也可能具有此功能。
    • 这也是 Google 开发者工具中的一项功能(如“黑盒”)。基本上,关键是封装和信息隐藏应该是您可以通过快速决定“将此命名空间黑箱”来指导调试器兑现的事情。 Django 开发人员已经完成了调试他们的框架的工作——在大多数情况下,我不应该关心内部结构(在某些情况下我会,当然,也有——但那些是 1/100就像我只想将库函数视为预言机一样普遍)。
    猜你喜欢
    • 2017-04-23
    • 2014-11-30
    • 2022-10-15
    • 2014-03-14
    • 2016-11-15
    • 2015-03-08
    • 2021-09-07
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多