python - PyDev 和 settrace 默默地打破

标签 python eclipse debugging pydev multiprocess

我正在尝试调试 Python 子进程(使用多进程启动)。我创建了一个仅包含以下代码的更简单的项目,启动了远程调试器,然后启动了项目。我希望 Eclipse 能够中断 settrace 语句。

import multiprocessing
import pydevd

def new_proc():
    print("New Procedure.")

    pydevd.settrace()
    print("After settrace.")

p = multiprocessing.Process(target=new_proc)
p.start()
p.join()

我看到了第一个打印语句的输出,但没有看到第二个打印语句的输出,并且没有执行中断。

然后我向 settrace() 发送了带有 False 的“暂停”参数。

import multiprocessing
import pydevd

def new_proc():
    print("New Procedure.")

    pydevd.settrace(suspend=False)
    print("After settrace.")

p = multiprocessing.Process(target=new_proc)
p.start()
p.join()

这一次,我按预期看到了两条消息。然后我在第二个 print 语句上设置了一个断点,然后再次运行。现在,我再也看不到第二条消息了。

因此,看起来 Eclipse 似乎在应该中断执行时中断了执行,但没有将控制权返回给我。有什么我想念的吗?

最佳答案

好吧,如果那是你的确切代码并且你在 Windows 上,问题是你没有正确设置多处理(你需要检查 freeze_support())...也就是说,假设你也正确启动了远程调试器:http://pydev.org/manual_adv_remote_debugger.html

即:

import multiprocessing
import pydevd

def new_proc():
    print("New Procedure.")

    pydevd.settrace()
    print("After settrace.")

if __name__ == '__main__':
    multiprocessing.freeze_support()

    p = multiprocessing.Process(target=new_proc)
    p.start()
    p.join()

关于python - PyDev 和 settrace 默默地打破,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17016207/

相关文章:

python - 将 PyGUI 添加到项目中

java - 如何访问InputStream对象中的String?

c# - 调试的最佳实践

c++ - 为什么我不能打印出我的宏创建结构的所有成员名称?

java - 什么是堆栈跟踪,我如何使用它来调试我的应用程序错误?

python lxml.html : proper way to iterate through text with . 文档字符串顺序的尾部

python - 类型不正确。预期的 pk 值,收到的指令。 Django Rest 框架 - Vue

python - urllib - 从 Python2 更新到 Python3

java - 启动 Jetty 服务器时扫描条目 "module-info.class"时出错

java - 刚刚开始。需要将一些计算出的数字打印到屏幕上