简单的 PyQt5 QML 应用程序导致分段错误

     2023-02-16     242

关键词:

【中文标题】简单的 PyQt5 QML 应用程序导致分段错误【英文标题】:Simple PyQt5 QML application causes segmentation fault 【发布时间】:2016-09-08 00:51:33 【问题描述】:

在尝试运行 very basic PyQt5 QML example 时,我发现我遇到了分段错误。我证实它似乎只处理显示 QML,因为 an example without a window 运行良好。我尝试了以下最小测试:

#!/usr/bin/python3
import sys
from PyQt5.QtCore import QUrl
from PyQt5.QtWidgets import QGuiApplication
from PyQt5.QtQml import QQmlApplicationEngine

# Main Function
if __name__ == '__main__':
    app = QGuiApplication(sys.argv)
    engine = QQmlApplicationEngine("simple.qml")
    engine.quit.connect(app.quit)
    sys.exit(app.exec_())

simple.qml:

import QtQuick 2.5
import QtQuick.Controls 1.4

ApplicationWindow 
    width: 300
    height: 200
    title: "Simple"
    visible: true

当我运行这个应用程序时,会在关闭之前出现一个窗口,就像在更详细的示例中一样,我在控制台中收到Segmentation fault(仅此而已)。

从 GDB 运行显示 QSGRenderThread 正在接收 SIGSEGV:

(gdb) run snowman_qt.py 
Starting program: /usr/bin/python3 snowman_qt.py
[Thread debugging using libthread_db enabled]
Using host libthread_db library "/lib/x86_64-linux-gnu/libthread_db.so.1".
[New Thread 0x7fffe912b700 (LWP 17200)]
[New Thread 0x7fffe3dbb700 (LWP 17201)]
[New Thread 0x7fffe1442700 (LWP 17202)]
[New Thread 0x7fffdbfff700 (LWP 17203)]

Thread 5 "QSGRenderThread" received signal SIGSEGV, Segmentation fault.
[Switching to Thread 0x7fffdbfff700 (LWP 17203)]
__strstr_sse2 (haystack_start=0x0, needle_start=0x7fffe28c9dd0 "nouveau") at ../string/strstr.c:63
63  ../string/strstr.c: No such file or directory.

回溯如下:

#0  __strstr_sse2 (haystack_start=0x0, needle_start=0x7fffe28c9dd0 "nouveau") at ../string/strstr.c:63
#1  0x00007fffe27233ea in QSGRenderContext::initialize(QOpenGLContext*) ()
   from /usr/local/lib/python3.5/dist-packages/PyQt5/Qt/qml/QtQuick.2/../../lib/libQt5Quick.so.5
#2  0x00007fffe273e979 in ?? ()
   from /usr/local/lib/python3.5/dist-packages/PyQt5/Qt/qml/QtQuick.2/../../lib/libQt5Quick.so.5
#3  0x00007ffff56835f9 in ?? () from /usr/local/lib/python3.5/dist-packages/PyQt5/Qt/lib/libQt5Core.so.5
#4  0x00007ffff7bc16fa in start_thread (arg=0x7fffdbfff700) at pthread_create.c:333
#5  0x00007ffff78f7b5d in clone () at ../sysdeps/unix/sysv/linux/x86_64/clone.S:109

如果我运行 QML 文件 from a C++ application,则没有分段错误并且应用程序可以正常工作。请注意,我使用的是不带 PyOtherside 的 PyQT,但症状似乎相似。

有没有办法获取更多信息以继续调试?

我在 Linux Mint 18 上运行 Python 3.5.2。我的 QT 版本是 5.7.0,我的 PyQt 版本是 5.7,我的 SIP 版本是 4.18.1。

【问题讨论】:

【参考方案1】:

兔子洞比我想象的要深。有一些问题。

    Linux Mint 18(可能是 Ubuntu 16.04)存储库中的 SIP 版本太旧。我被installing from source更新到4.18.1。 使用更新的 SIP 版本,我可以compile the latest PyQt5 from source。然而,在编译之前,我必须安装 libqt5opengl5-dev 以便它可以与 QtOpenGL 模块一起编译。编译后,我使用checkinstall安装,这样回滚更容易。

使用最新的 SIP 和 PyQt5,我不再收到分段错误。但是,我遇到了 OpenGL 着色器没有正确创建的问题,只是收到了一个纯白色的窗口。

this bug 的解决方法是在 Python 程序中加载 PyQt 之前包含以下内容:

import ctypes
from ctypes import util
ctypes.CDLL(util.find_library('GL'), ctypes.RTLD_GLOBAL)

我相信这是带有 NVIDIA 显卡和二进制驱动程序的基于 Ubuntu 的操作系统所独有的。

【讨论】:

pyqt5 中的分段错误(核心转储)

...018-01-2414:39:56【问题描述】:我尝试使用QWebEnginePage使pyqt5应用程序可重新启动。但是有段错误。这是代码示例:importsysfromPyQt5.QtWidgetsimportQApplicationfromPyQt5.QtWidgetsimportqApp#fr 查看详情

pyqt5 孩子使用 qml 文件访问

...QML或API理解是错误的。我使用名为main.qml的TextEdits创建了简单的QML文件importQtQuick 查看详情

delete[] 运算符在非常简单的情况下导致分段错误

】delete[]运算符在非常简单的情况下导致分段错误【英文标题】:delete[]operatorcausessegmentationfaultinverysimplecase【发布时间】:2016-08-2023:59:52【问题描述】:当我在分配的动态数组(使用new关键字创建)上调用delete[]时,会发生一个... 查看详情

导致 vector<int> 中的 push_back 在看似简单的操作上出现分段错误

】导致vector<int>中的push_back在看似简单的操作上出现分段错误【英文标题】:Causingpush_backinvector<int>tosegmentaionfaultonwhatseemstobesimpleoperation【发布时间】:2009-11-1920:39:55【问题描述】:我正在为ProjectEuler开发一个程序来添... 查看详情

std::string 的声明导致 OpenGL 出现分段错误

...发布时间】:2015-06-2004:15:17【问题描述】:考虑一个非常简单的OpenGL程序:#include<GL/glut.h>staticvoidRenderScene()glClear(GL_COLOR_BUFFER_BIT) 查看详情

是啥导致发生分段错误?

】是啥导致发生分段错误?【英文标题】:WhatiscausingSegmentationerrortooccur?是什么导致发生分段错误?【发布时间】:2016-12-1112:48:16【问题描述】:如上运行程序显示分段错误。为什么会这样?该程序适用于vigenerecipher。我正在做... 查看详情

打印指针会导致分段错误

】打印指针会导致分段错误【英文标题】:Printingapointercausesasegmentationfault【发布时间】:2018-01-1823:06:04【问题描述】:在我的程序中,我在一个类的函数中有这两行:char*chunkToReturn=nullptr;std::cout<<chunkToReturn<<std::endl;但... 查看详情

pyqt5与qml

...declarativelanguage),它可以让您使用传统的言语快速开发应用。下面介绍利用PyQt5与QML快速开发GUI。首先,创建一个名为view.qml的QML文件:该文件描述的是“绿色的矩形框”,“文本为:HelloWorld”。接下来要使用PyQt5获取并创建GUI... 查看详情

sqlcxt() 导致分段错误

】sqlcxt()导致分段错误【英文标题】:sqlcxt()causessegmentationfault【发布时间】:2009-12-0406:59:20【问题描述】:让我们说明sqlcxt()可能导致分段错误的条件,我在unix上工作,使用ProC连接到Oracle数据库。我的程序崩溃了,核心文件显... 查看详情

是啥导致了这种分段错误?

】是啥导致了这种分段错误?【英文标题】:Whatiscausingthissegmentationfault?是什么导致了这种分段错误?【发布时间】:2014-04-1503:33:50【问题描述】:这里是菜鸟。弹出打开我的虚拟机以编辑程序,但是(据我所知),在我进行任... 查看详情

由于向量导致的分段错误

】由于向量导致的分段错误【英文标题】:SegmentationFaultduetovectors【发布时间】:2013-10-2706:43:30【问题描述】:我有一个程序应该用四阶rungekutta方法和eulercromer方法计算钟摆的轨迹,不幸的是......我有一个段错误。我不知道如何... 查看详情

使用 PyQt5 和 pyudev 通知 QML 的“usb 设备插入”事件

...【发布时间】:2019-02-2516:27:53【问题描述】:我有一个GUI应用程序(使用PyQt5和QML制作)并且希望在USB设备从计算机上插入或拔出时得到通知。经过一番调查,我发现pyudev可能是要使用的库。但我无法将它与PyQt5和Q 查看详情

MPI calloc 导致分段错误

】MPIcalloc导致分段错误【英文标题】:MPIcallocCausesSegmentationFault【发布时间】:2016-03-2207:01:33【问题描述】:我编写了一个程序来通过MPI查找数组元素的总和。root和worker都找到部分的总和,worker最后将部分总和发送给root。当我... 查看详情

PyQt5 和 QML 集成问题,“findChild”返回 AttributeError

...长时间,但找不到与我的情况足够接近的场景。我遇到的错误如下(我正在使用 查看详情

巨大的数组导致分段错误[重复]

】巨大的数组导致分段错误[重复]【英文标题】:Hugearrayiscausingsegmentationfault[duplicate]【发布时间】:2019-03-2417:53:52【问题描述】:我正在尝试读取包含大约10^7个值的数据文件并执行一些计算。我正在创建一个该大小的数组并执... 查看详情

QML:为图像设置“源”属性会导致它消失

】QML:为图像设置“源”属性会导致它消失【英文标题】:QML:Setting"source"propertyforimagecausesittodisappear【发布时间】:2018-11-0121:09:07【问题描述】:我要做的是在PyQt5中使用QML更新图像的源。当我使用element.setProperty("sour... 查看详情

矩形状态仅在单击 PyQt5 QML 时发生变化

...布时间】:2017-04-0714:55:23【问题描述】:我有我的新PyQt5应用程序。我想在QMainWindow中添加QQuickWidget并使用QML设置他的属性。我就是这样做的:classmainWindow(QtWidgets.QMainWindow):def__ini 查看详情

一个简单的 qt 程序未运行并显示“分段错误”的错误消息

】一个简单的qt程序未运行并显示“分段错误”的错误消息【英文标题】:Asimpleqtprogramnotrunningwitherrormessagesaying"segmentationfault"【发布时间】:2014-04-0822:32:19【问题描述】:编译成功,但是当我运行它时,终端给了我“分... 查看详情