2016-01-25 44 views
0


我使用的Eclipse + PyDev的+ 3.4蟒蛇+ pyQt5.5
我有一個奇怪的問題,沒有回溯或任何其他消息時程序崩潰。
當我嘗試編寫錯誤生成代碼時,程序啓動時執行(如初始化方法的MainWindow)我有我的標準回溯,一切都很好。
但是,當我把我的壞代碼在某種回調(如方法連接到QPushButoon點擊信號),並按下該按鈕,程序崩潰,但我的Eclipse控制檯窗口保持空。沒有追蹤,沒有錯誤信息,只是沒有。
你有什麼建議嗎?在Eclipse中的PyDev沒有回溯

編輯。示例代碼:
對於這種類型的代碼,應用程序會在啓動時崩潰,我將獲得回溯了,一切都會好起來:

class MainWindow(QMainWindow): 
    def __init__(self): 
     super().__init__() 
     error_producing_string 

而在這個示例應用程序會崩潰上按一下按鈕,但我不會得到任何錯誤或回溯:

class MainWindow(QMainWindow): 
    def __init__(self): 
     super().__init__() 
     self.btn = QPushButton('text', self) 
     self.button.clicked.connect(self.handleButton) 

    def handleButton(self): 
     error_producing_string 

回答

1

好,PyQt的可以在某些情況下確實崩潰(它可能有無關PyDev的)......甚至有從QT回調內部的異常可能會崩潰應用程序(所以,你真的不得不t仔細重新編碼qt代碼)。

這裏的第一件事就是開啓錯誤處理程序,看它是否能讓你找到有用的東西。如果沒有,嘗試加入PyDev調試器,直到它崩潰,看看你是否可以從中得到一些有用的東西......如果你仍然無法得到原因,下一步將得到一個調試版本的python/PyQt並在gdb或visual C++中進行調試。

另外,在處理PyQt時,你應該看看What are good practices for avoiding crashes/hangs in PyQt?的最佳實踐。

+0

試圖打開故障處理程序(-X faluthandler),仍然沒有錯誤信息,但控制檯標題現在是「 faulthandler」而不是「 main.py」。並在調試透視和調試啓動我有交互式控制檯,但仍然沒有堆棧跟蹤或錯誤消息。 –

+0

將嘗試檢查我的qt代碼的不良做法或安裝調試版本 –

+0

而在調試中,我注意到,當它在__init__中崩潰時,它通過堆棧跟蹤返回,並將所有收集的信息發送到stderr,但在我的按鈕連接它只是直接跳轉到** sys.exit(app.exec _())** –