私はPyQtを使ってソフトウェアを開発しようとしていますが、デバッグ情報(終了コード0xC0000409のみ)なしでソフトウェアがクラッシュすることがよくあります。私はQThreadを使用している、と私は、このようなシステムを書いた:情報なしでPyQtがクラッシュするのはなぜですか? (終了コード0xC0000409)
class serialThreadC(QThread):
updateOutBox = QtCore.pyqtSignal(str)
updateStatus = QtCore.pyqtSignal(int)
def __init__(self):
super(serialThreadC, self).__init__()
self.ser = False
self.state = 0
self.serialEnabled = False
def run(self):
while True:
if self.state == -3 or self.state == -2:
if self.SerialEnabled:
self.updatePB(20)
elif self.state == 0:
if self.serialEnabled:
self.updatePB(20)
def ConnDisconn(self):
self.serialEnabled = not self.serialEnabled
def updatePB(self, stat):
self.state = stat
self.updateStatus.emit(self.state)
serialThread = serialThreadC()
serialThread.start()
## sw is a QDialog already loaded
serialThread.updateOutBox.connect(sw.updateOutBox)
serialThread.updateStatus.connect(sw.updateStatus)
sw.PB_ConnDisconn.clicked.connect(serialThread.ConnDisconn)
私は読み取り/ run()
またはConnDisconn()
でserialEnabled
を書くとき、私はクラッシュを持っています。 PyQtはスレッドセーフではなく、変数の処理が間違っていると私のタイプがクラッシュすることは知っていますが、私のコードで何が間違っているのか理解できません。私の考え方(多分間違っている)は、すべてのserialThread
メソッドが同じスレッド上で実行され、GUIスレッド(メインスレッド)に接続されている場合も同じです。それは間違っていますか?同じように、私はserialThread
からイベントを出し、GUIにそれらを接続しましたが、それは私に問題を与えませんでした。
私は間違いを確認できますか?他の情報なしでクラッシュした場合、コードをデバッグする方法はありますか? (私はPyCharm 2017.1.3を使用しています)。
端末から実行しようとしましたか? – eyllanesc
それは本当です!ターミナルで私はクラッシュの原因があります:|そして、私は情報がないコードをデバッグするために8時間のように無駄です... その場合、私が与えた2つの同様の関数updatePB(self、stat)とupdatePB(self)の過負荷をPythonが理解できないようです私はそれを呼び出すときに1の代わりに2つのパラメータ。 – brazoayeye