我有一个使用C++库的django应用程序(通过swig导入).C++库启动自己的线程,该线程在Python代码中调用回调.
我无法在python代码中设置断点,在PyDev和PyCharm中也是如此.也试过'gevent compatibility'选项也没有运气.
我验证了回调被正确调用,因为logging.info转储了预期的内容.在其他线程中设置的断点工作正常.因此,似乎python调试器无法管理在非python代码中创建的线程调用的python代码中的断点.
有没有人知道解决方法?也许我可以使用一些"魔术"线程初始化序列?
你必须设置调试器机制才能在非python线程上工作(这是在创建Python线程时自动完成的,但是当你创建一个Python没有任何创建钩子的线程时,你必须这样做自己) - 请注意,对于某些框架 - 例如QThread/Gevent - 事情是猴子修补的,以便我们了解初始化并启动调试器,但对于其他框架,您必须自己完成.
要做到这一点,在启动线程后你必须调用:
import pydevd pydevd.settrace(suspend=False, trace_only_current_thread=True)
请注意,如果您已经放置suspend=True
,它将模拟手动断点并在代码的该点停止.