【发布时间】: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