gpt4 book ai didi

multithreading - 为什么 Pycharm 调试器不会在主线程外的断点处停止?

转载 作者:行者123 更新时间:2023-12-03 12:46:01 26 4
gpt4 key购买 nike

这个问题在这里已经有了答案:





Not working python breakpoints in C thread in pycharm or eclipse+pydev

(2 个回答)


5年前关闭。




我正在使用 PyCharm 2016.2.3 (Build #PY-162.1967.10)。无论断点的挂起属性是 All 还是 Thread,我都无法让调试器在主线程之外的任何断点处停止;或者如果那是整个程序中唯一的断点。线程是通过将 QObject 移入 QThread 来实现的。这是显示问题的简单代码。辅助线程中的任何断点(在 Master.do() 或 Worker.run() 内)都不会被命中。

import sys
from PyQt5.QtCore import QCoreApplication, QObject, QThread, pyqtSignal, pyqtSlot


class Worker(QObject):
"""
Generic worker.
"""
start = pyqtSignal(str)
finished = pyqtSignal()

def __init__(self, function):
QObject.__init__(self)
self._function = function
self.start.connect(self.run)

@pyqtSlot()
def run(self):
#TODO Breakpoints inside this method will not be hit.
self._function()
self.finished.emit()


class Master(QObject):
"""
An object that will use the worker class.
"""

def __init__(self):
QObject.__init__(self)

def do(self):
#TODO Breakpoints inside this method will not be hit.
print("All done.")
QCoreApplication.quit()


def main():
app = QCoreApplication(sys.argv)

master = Master()
worker = Worker(master.do)

thread = QThread()
worker.moveToThread(thread)
thread.started.connect(worker.run)

# Terminating thread gracefully, or so.
worker.finished.connect(thread.quit)
worker.finished.connect(worker.deleteLater)
thread.finished.connect(thread.deleteLater)

thread.start()

sys.exit(app.exec_())


if __name__ == "__main__":
main()

最佳答案

在这里找到答案:Not working python breakpoints in C thread in pycharm or eclipse+pydev

基本上,我必须在启动后立即导入 pydevd 并在线程中添加以下内容:
pydevd.settrace(挂起=假,trace_only_current_thread=真)

关于multithreading - 为什么 Pycharm 调试器不会在主线程外的断点处停止?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40258356/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com