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

时间:2017-03-20 16:00:25

标签: python-3.x debugging pyqt pycharm

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

我是一名经验丰富的程序员,但对于所有蟒蛇都是新手。我获得了一个大型应用程序(36,000行),可以在Windows下运行,移植到Linux。

对于特定于操作系统的东西进行了一些更改,当我运行应用程序时,它会显示其主窗口。但是几秒钟后它变暗了,当我关闭窗口时,我被要求确认结束“窗口没有响应”。

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

如果我在PyCharm中调试它,那时我希望点击“暂停程序”按钮,这样我就可以回过头来开始查看它在代码中的位置,然后开始踩踏等等。但是,这个按钮在这个阶段什么都不做?也许它只在“蟒蛇指令”上“有效”?

如果我强制核心转储(来自键盘)并使用gdb进行检查,我可以看到堆栈框架显示它位于libQtCore / libQtGui内,{ {1}}致电{1}}。

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

1 个答案:

答案 0 :(得分:0)

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

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

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

显然有些人试图获得剪贴板对象。无论出于何种原因,这似乎在以 su 运行时起作用,但是当以登录用户身份运行时,它会导致整个应用程序停止"挂起"。删除这两行解决了无响应。

就我从中学到的用于调试无响应应用程序的内容而言:您需要调试不是从程序的入口点开始,正如我所期望的那样,而是从每个文件的开头直接调试,并实际进入每个文件导入行,以防它正在执行一些初始代码。可怕!