作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一个使用 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/
我是一名优秀的程序员,十分优秀!