跳至主要內容
  • Hostloc 空間訪問刷分
  • 售賣場
  • 廣告位
  • 賣站?

4563博客

全新的繁體中文 WordPress 網站
  • 首頁
  • pyqt 界面崩溃时,能否执行别的动作
未分類
22 11 月 2020

pyqt 界面崩溃时,能否执行别的动作

pyqt 界面崩溃时,能否执行别的动作

資深大佬 : HITMengbin 3

请教各位,因为需要连接一个 com 口读取信息,com 口经常消失,导致 pyqt 的界面存在崩溃的情况,想添加一个功能,在程序出现问题,界面准备崩溃的时候,会执行这个功能,请问这个想法可以实现吗?如何实现呢?

大佬有話說 (11)

  • 資深大佬 : tanranran

    sys.excepthook

  • 資深大佬 : Vegetable

    https://docs.python.org/zh-cn/3/library/atexit.html
    也许能解决你的问题,这个模块可以注册函数,在程序退出之前自动执行。你描述的场景应该属于一般的 error,在射程之内。

  • 資深大佬 : DoctorCat

    崩溃了怕是不行,Qt native 库是非托管的,已经进入系统管辖的异常链了。Python VM 层面无法 catch 到的。Qt 的动态库里看看有没有什么方法能捕获。

    @tanranran
    @Vegetable

  • 主 資深大佬 : HITMengbin

    @tanranran 我现在只是在每个查询端口那里加 try 判断,总感觉这样太不方便了

  • 主 資深大佬 : HITMengbin

    @Vegetable 好的,我看看,谢谢

  • 主 資深大佬 : HITMengbin

    @DoctorCat QT 本身有 event 判定,但是就是崩溃了,对事件判定不知道还能不能行

  • 資深大佬 : gainsurier

    breakpad ?

  • 主 資深大佬 : HITMengbin

    @gainsurier 只是抓取崩溃报告吧

  • 資深大佬 : wuwukai007

    def excepthook(exc_type, exc_value, exc_tb):
    tb = “”.join(traceback.format_exception(exc_type, exc_value, exc_tb))
    logging.info(“error message:n%s”, tb)
    # QtWidgets.QApplication.quit()

    sys.excepthook = excepthook
    ret = app.exec_()
    sys.exit(ret)

  • 資深大佬 : andthen255

    虽然我用的是 qt 不是 pyqt,崩溃了是主线程阻塞卡死了吧? exec 本质是一个循环一直拿事件队列里的事件处理,卡死就不会处理事件了,当然也不会执行什么功能。我都是开个线程处理 COM,每次操作的时候判断状态

  • 資深大佬 : RealMadrid

    如果是 qt 的话,qtcreator 源码中有一个 qtcrashhandler 的工具。当 qtcreator 崩溃时,会弹出一个窗口,打印奔溃的 back trace.
    具体实现原理,就是注册 sigaction, 当软件发生错误时,进入注册的函数。在函数里 fork 个进程,对原进程进行 gdb 分析,再启动另一个 dialog, 显示出来

文章導覽

上一篇文章
下一篇文章

AD

其他操作

  • 登入
  • 訂閱網站內容的資訊提供
  • 訂閱留言的資訊提供
  • WordPress.org 台灣繁體中文

51la

4563博客

全新的繁體中文 WordPress 網站
返回頂端
本站採用 WordPress 建置 | 佈景主題採用 GretaThemes 所設計的 Memory
4563博客
  • Hostloc 空間訪問刷分
  • 售賣場
  • 廣告位
  • 賣站?
在這裡新增小工具