Python 3.x 在PyCharm中调试非响应python/PyQt应用程序

Python 3.x 在PyCharm中调试非响应python/PyQt应用程序,python-3.x,debugging,pyqt,pycharm,Python 3.x,Debugging,Pyqt,Pycharm,如何在PyCharm中调试无响应的python/PyQt应用程序 我是一名经验丰富的程序员,但对python一无所知。我得到了一个在Windows下工作的大型应用程序(36000行),可以移植到Linux 在对操作系统特定的内容进行了少量更改之后,当我运行应用程序时,它会显示主窗口。但几秒钟后,它变暗,当我关闭窗口时,我被要求确认结束“窗口没有响应” (旁白:一时兴起,我决定尝试通过sudo运行该应用程序,令人惊讶的是,它运行得很好。我曾尝试过strace以root和非root身份运行,但我相当

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

我是一名经验丰富的程序员,但对python一无所知。我得到了一个在Windows下工作的大型应用程序(36000行),可以移植到Linux

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

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

如果我在PyCharm中调试它,我希望在那一点上单击“暂停程序”按钮,这样我就可以得到一个跟踪并开始查看它在代码中的位置,然后开始单步执行或其他任何操作。然而,在这个阶段,该按钮什么都不做?也许它只在“python指令”上“起作用”

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


那么,我该如何开始调试它为什么(可能)在这一点上忙着做一些事情,或者至少没有响应?欢迎提供任何提示。我确实希望这个问题不会与So的“过于笼统”的政策相抵触,也不希望有任何提示让某人继续调试“无响应”的程序欢迎参加这个节目。

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

在本例中,问题出在一个文件中,该文件名为
pyperclip.py
,名为import并被导入到其他文件中。该文件的代码位于任何函数之外,并且位于在Linux下执行的源代码路径中,但我认为不是在Windows下执行的,其中包括:

app = PyQt4.QtGui.QApplication([])
cb = PyQt4.QtGui.QApplication.clipboard()
显然有人试图获取剪贴板对象。无论出于何种原因,当以su身份运行时,这似乎是可行的,但当以登录用户身份运行时,它会导致整个应用程序“挂起”。删除这两行代码解决了无响应问题


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

您的GUI被冻结了/无响应?从PyQt线程中删除所有非GUI内容,如加载资源、处理数据等。执行此操作时,您可能会发现其中一项操作花费了很长时间。@Trilarion不知道这意味着什么。是的,GUI是无响应/冻结的,必须强制退出。(除非以root用户身份运行,在这种情况下它工作正常。)没有单独的线程。