microsoft / microsoft/vscode-python-debugger

Bug:Debug didn't work in Qthread

Ouverte
#697 6 commentaires 1 réaction 0 personnes assignées Voir sur GitHub

Personne n'a encore pris cette issue.

feature-request needs community feedback
Langage dominant
TypeScript
Étoiles
180
Forks
126
Merge moyen
2 j 3 h
PR mergées (30 j)
3

Description

Description:

When I use Qt for Pyside6, I open a Qthread sub thread in the main thread and add a breakpoint inside the sub thread, but Python debugger does not enter the sub thread,it just didn't work

Origin Code:
main.py:

import sys
from PySide6.QtWidgets import QApplication, QMainWindow, QPushButton, QTextEdit, QVBoxLayout, QWidget
from PySide6.QtCore import Qt
from worker_thread import WorkerThread

class MainWindow(QMainWindow):
    def __init__(self):
        super().__init__()
        self.setWindowTitle("QThread Debug Test")
        self.setGeometry(100, 100, 400, 300)
        
        # 创建中央部件和布局
        central_widget = QWidget()
        self.setCentralWidget(central_widget)
        layout = QVBoxLayout(central_widget)
        
        # 创建按钮
        self.start_button = QPushButton("Start Thread")
        self.start_button.clicked.connect(self.start_thread)
        layout.addWidget(self.start_button)
        
        # 创建文本显示区域
        self.text_edit = QTextEdit()
        self.text_edit.setReadOnly(True)
        layout.addWidget(self.text_edit)
        
        # 创建工作线程
        self.worker_thread = None
    
    def start_thread(self):
        if self.worker_thread is None or not self.worker_thread.isRunning():
            self.worker_thread = WorkerThread()
            self.worker_thread.message_signal.connect(self.update_text)
            self.worker_thread.start()
            self.text_edit.append("Thread started...")
    
    def update_text(self, message):
        self.text_edit.append(message)

if __name__ == "__main__":
    app = QApplication(sys.argv)
    window = MainWindow()
    window.show()
    sys.exit(app.exec()) 

sub_thread.py:

from PySide6.QtCore import QThread, Signal
import time

class WorkerThread(QThread):
    message_signal = Signal(str)
    
    def __init__(self):
        super().__init__()
        self.running = True
    
    def run(self):
        count = 0
        while self.running and count < 10:
            count += 1
            self.message_signal.emit(f"Count: {count}")
            time.sleep(1)  # 模拟耗时操作
        
        self.message_signal.emit("Thread finished!")
    
    def stop(self):
        self.running = False 

Where is the sub-thread?

Image

Where is the breakpoint?

Image

What's the Performance?
Set the breakpoint and push the button,then you'll find that Python Debugger didn't work in the workthread(sub-thread)!

Image

Image

Guide de contribution

Ouvrir le guide de contribution

Par où commencer

  1. Lisez l'issue en entier, puis le guide de contribution du projet.
  2. Signalez en commentaire que vous la prenez — cela évite que deux personnes fassent le même travail.
  3. Forkez le dépôt et travaillez sur une branche.
  4. Ouvrez une pull request qui référence le numéro de l'issue.

Piste de recherche

Commencez par reproduire le rapport avec les exemples fournis main.py et sub_thread.py, en plaçant un point d’arrêt dans WorkerThread.run. Examinez ensuite la gestion des threads du débogueur ainsi que les tests existants pour la prise en charge de PySide6 ou de QThread. Le travail est considéré comme terminé lorsque le point d’arrêt dans le thread de travail est atteint au cours d’une session de débogage VS Code.

Rédigé par le modèle d'indexation à partir du texte de l'issue.

Évaluation

Stack technique
python
Domaine
devtools
Type d'issue
Bug
Difficulté
4/5
Temps estimé
3-5 jours
Activité
À l'abandon
Clarté
À clarifier
Accessibilité débutants
25/100

Recevez les nouvelles issues par e-mail

Un résumé court des issues GitHub adaptées aux débutants.