eclipse - 在 pycharm 或 eclipse+pydev 的 C 线程中无法使用 python 断点

标签 eclipse multithreading debugging pycharm pydev

我有一个使用 C++ 库(通过 swig 导入)的 django 应用程序。
C++ 库启动自己的线程,该线程在 Python 代码中调用回调。

我无法在 python 代码中设置断点,无论是在 PyDev 还是 PyCharm 中。
也尝试了“gevent 兼容性”选项,但没有运气。

我验证了回调被正确调用,因为 logging.info 转储了预期的内容。在其他线程中设置的断点工作正常。因此,python 调试器似乎无法管理由非 python 代码中创建的线程调用的 python 代码中的断点。

有谁知道解决方法?也许我可以使用一些“神奇”的线程初始化序列?

最佳答案

您必须设置调试器机器才能使其在非 Python 线程上工作(这是在创建 Python 线程时自动完成的,但是当您创建 Python 没有任何创建钩子(Hook)的线程时,您必须这样做你自己)——请注意,对于某些框架——例如 QThread/Gevent——事情是猴子修补的,以便我们知道初始化并启动调试器,但对于其他框架,你必须自己做。

为此,在启动线程后,您必须调用:

import pydevd
pydevd.settrace(suspend=False, trace_only_current_thread=True)

请注意,如果您将 suspend=True ,它会模拟一个手动断点,并会在代码的那个点停止。

关于eclipse - 在 pycharm 或 eclipse+pydev 的 C 线程中无法使用 python 断点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34299082/

相关文章:

ruby-on-rails - 如果花费的时间超过 X 秒,则退出线程

python-3.x - 如何让 pylint 在 VS Code 中使用 python 3?

python - 任何 IDE 中是否有调试功能可以让您查看您的代码占用的 "path"?

尝试将位图加载到 imageView 时出现 java.lang.OutOfMemoryError

c - Eclipse CDT、包含的系统头文件和底层 C 构建之间奇怪的断开连接

eclipse - 使用eclipse kelper创建maven webapp项目,出现eclipse错误

javascript - 在 Chrome 中实时编辑 Javascript,就像在 Visual Studio 中编辑并继续

java - Java中的可变深度递归

c# - Asp .Net 后台工作线程

java - 使用线程删除位置更新