【问题标题】:PyCharm: How can I use breakpoints in multithreaded code?PyCharm:如何在多线程代码中使用断点?
【发布时间】:2021-11-23 16:44:44
【问题描述】:

我想使用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.'

编辑:平台详情:Mac OS 10.9、Python 2.7.6、PyCharm 3.4.1

【问题讨论】:

  • 使用 PyCharm 和 python3 对我来说非常好。
  • 有趣!感谢您的数据点。我想知道为什么它对我不起作用...请问您使用的是什么平台? (我会将我的平台添加到问题文本中。)
  • Pycharm 3.4.1(专业版)和 Win 7 x64 下的 Python 3。但我也在 Linux Mint 下使用它,我几乎可以肯定它在那里也能正常工作。
  • 我还可以确认它对我有用。 PyCharm 3.4.1 专业版,Arch Linux 下的 Python 2。
  • 2017-02-07:仍然不适合我(版本 2016.3.2,OSX)。可能是 OSX 问题。

标签: python multithreading pycharm


【解决方案1】:

这似乎对我有用:

#!/usr/bin/python

import time
import threading
import pdb

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

th = threading.Thread(target=f)
th.start()
time.sleep(30)
print 'done.'

执行期间:

┌───┤/tmp├──────────────────────────────────────┤0.43├──────┤20140612.211049├───
└─┤goncalog@darkside:pts/1│ret=1├────> python test.py 
tick-tock
> /tmp/test.py(8)f()
-> while True:
(Pdb) list
  3     import time
  4     import threading
  5     import pdb
  6     
  7     def f():
  8  ->     while True:
  9             time.sleep(1.0)
 10             print 'tick-tock' # Put a breakpoint here...
 11             pdb.set_trace()
 12     
 13     th = threading.Thread(target=f)
(Pdb) c
tick-tock
> /tmp/test.py(8)f()
-> while True:
(Pdb) 

【讨论】:

  • 感谢您的解决方法。但是,在 PyCharm 中启用多线程断点功能的解决方案会更可取。我的程序是一个交互式应用程序,所以我想在不编辑源代码并重新启动应用程序的情况下设置断点。
【解决方案2】:

这个帖子比较老了,不过还是值得一提this解决方案:

打开“编辑配置...”并添加这一行:

PYDEVD_USE_CYTHON=NO;PYDEVD_USE_FRAME_EVAL=NO;

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

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

【讨论】:

    猜你喜欢
    • 2018-09-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-03-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多