作者热门文章
- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
我正在使用 PyDev for Eclipse 插件,我试图在一些在后台线程中运行的代码中设置一个断点。即使代码正在执行,断点也永远不会被击中。这是一个小例子:
import thread
def go(count):
print 'count is %d.' % count # set break point here
print 'calling from main thread:'
go(13)
print 'calling from bg thread:'
thread.start_new_thread(go, (23,))
raw_input('press enter to quit.')
该示例中的断点在主线程上调用时命中,但在后台线程中调用时则不会。有什么我可以做的,还是 PyDev 调试器的限制?
感谢您的变通。我提交了 PyDev feature request , 并且已经完成。它应该与版本 1.6.0 一起发布。谢谢,PyDev 团队!
最佳答案
问题是线程模块中没有 API 可以知道线程何时启动。
在您的示例中,您可以自己设置调试器跟踪功能(正如 Alex 所指出的),如下面的代码(如果您不在远程调试器中,则 pydevd.connected = True 目前是必需的——我将更改 pydev,以便不再需要它)。您可能想为 pydevd 导入添加一个 try..except ImportError(如果您没有在调试器中运行,它将失败)
def go(count):
import pydevd
pydevd.connected = True
pydevd.settrace(suspend=False)
print 'count is %d.' % count # set break point here
现在,再三考虑,我认为 pydev 可以替换线程模块中的 start_new_thread 方法,提供它自己的函数,该函数将设置调试器并稍后调用原始函数(只是那样做,它似乎可以工作,所以,如果您使用将在几个小时后可用的 nightly,它将成为 future 的 1.6.0,它应该可以正常工作而无需执行任何特殊操作。
关于python - 我可以在 Python 的后台线程上放置断点吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3114719/
我是一名优秀的程序员,十分优秀!