【问题标题】:Debugging non-responsive python/PyQt application in PyCharm在 PyCharm 中调试无响应的 python/PyQt 应用程序
【发布时间】:2017-08-12 00:15:57
【问题描述】:

如何在 PyCharm 中调试无响应的 python/PyQt 应用程序?

我是一位经验丰富的程序员,但对 python 的一切都是陌生的。我得到了一个在 Windows 下运行的大型应用程序(36,000 行),可以移植到 Linux。

只对特定于操作系统的内容进行了少量更改,当我运行应用程序时,它会出现它的主窗口。但是几秒钟后它变暗了,当我关闭窗口时,我被要求确认结束“窗口没有响应”。

(旁白:一时兴起,我决定尝试通过sudo 运行该应用程序,令人惊讶的是它运行良好。我尝试过以root 和非root 身份运行strace,但我相当确定有在文件访问/权限等方面没有什么明显的不同。这可能是一个线索,但也很可能是一个红鲱鱼,例如,如果它是一个“未初始化的变量”。)

如果我在 PyCharm 中调试它,此时我希望单击“暂停程序”按钮,这样我就可以回溯并开始查看它在代码中的位置,然后开始单步执行或其他操作。但是,那个按钮在这个阶段什么都不做?也许它只在“python指令”上“有效”?

如果我强制执行核心转储(从键盘)并使用gdb 进行检查,我可以看到堆栈框架显示它位于libQtCore/libQtGui 内部,在processEvents 中调用read.

那么我该如何开始调试为什么它(大概)此时正忙于做某事,或者至少没有响应?欢迎任何提示。我确实希望这个问题不会违反 SO 的“过于笼统”的政策,任何让某人继续调试“无响应”程序的提示都将受到欢迎。

【问题讨论】:

  • 您的 GUI 冻结/无响应?从 PyQt 线程中删除所有非 GUI 的东西,如资源加载、数据处理……。在执行此操作时,您可能会发现其中一件事情需要很长时间。
  • @Trilarion 不知道这是什么意思。是的,GUI 没有响应/冻结,必须强制退出。 (除非以 root 身份运行,在这种情况下它可以正常工作。)没有单独的线程。

标签: python-3.x debugging pyqt pycharm


【解决方案1】:

回答我自己的问题,因为似乎没有回应。

在这种情况下,问题出在一个文件中,该文件被导入到其他文件中,名为pyperclip.py。这具有任何函数之外的代码,并且在通过在 Linux 下执行的源代码的路径中,但我认为不是在 Windows 下,其中包括:

app = PyQt4.QtGui.QApplication([])
cb = PyQt4.QtGui.QApplication.clipboard()

显然有些人试图获取剪贴板对象。无论出于何种原因,当以 su 身份运行时,这似乎可以工作,但是当以登录用户身份运行时,它会导致整个应用程序“挂起”。删除这两行解决了反应迟钝的问题。

就我从调试无响应的应用程序中学到的东西而言:您需要调试的不是程序的入口点,正如我所预料的那样,而是从每个文件的开头开始,并实际进入每个文件import 行,以防它正在执行一些初始代码。太可怕了!

【讨论】:

    猜你喜欢
    • 2016-05-27
    • 2019-09-27
    • 1970-01-01
    • 2015-12-27
    • 2017-05-17
    • 1970-01-01
    • 2020-06-15
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多