PyCharm:我如何在多线程代码中使用断点?

Stu*_*erg 13 python multithreading pycharm

我想使用PyCharm,但我真的需要在主线程以外的线程中使用断点.

在此示例代码中,PyCharm不会在线程函数中断开.有办法解决这个问题吗?

import time, threading
def f():
    while True:
        time.sleep(1.0)
        print 'tick-tock' # Put a breakpoint here...

th = threading.Thread(target=f)
th.start()
time.sleep(30)
print 'done.'
Run Code Online (Sandbox Code Playgroud)

编辑:平台详细信息:Mac OS 10.9,Python 2.7.6,PyCharm 3.4.1

ish*_*hak 5

这个线程已经很老了,但仍然值得一提这个解决方案:

打开“编辑配置...”并添加以下行:

PYDEVD_USE_CYTHON=NO;PYDEVD_USE_FRAME_EVAL=NO;

进入环境变量部分的开头:

在此输入图像描述

这似乎允许断点在后台线程中运行时停止。


Gon*_*alo 1

这似乎对我有用:

\n\n
#!/usr/bin/python\n\nimport time\nimport threading\nimport pdb\n\ndef f():\n    while True:\n        time.sleep(1.0)\n        print 'tick-tock' # Put a breakpoint here...\n        pdb.set_trace()\n\nth = threading.Thread(target=f)\nth.start()\ntime.sleep(30)\nprint 'done.'\n
Run Code Online (Sandbox Code Playgroud)\n\n

执行期间:

\n\n
\xe2\x94\x8c\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\xa4/tmp\xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\xa40.43\xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\xa420140612.211049\xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\n\xe2\x94\x94\xe2\x94\x80\xe2\x94\xa4goncalog@darkside:pts/1\xe2\x94\x82ret=1\xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80> python test.py \ntick-tock\n> /tmp/test.py(8)f()\n-> while True:\n(Pdb) list\n  3     import time\n  4     import threading\n  5     import pdb\n  6     \n  7     def f():\n  8  ->     while True:\n  9             time.sleep(1.0)\n 10             print 'tick-tock' # Put a breakpoint here...\n 11             pdb.set_trace()\n 12     \n 13     th = threading.Thread(target=f)\n(Pdb) c\ntick-tock\n> /tmp/test.py(8)f()\n-> while True:\n(Pdb) \n
Run Code Online (Sandbox Code Playgroud)\n

  • 感谢您的解决方法。但是,在 PyCharm 中启用多线程断点功能的解决方案会更好。我的程序是一个交互式应用程序,因此我想设置断点而不编辑源代码并重新启动应用程序。 (5认同)