Qt-opengl-debug-SIGSEGV-如何修复?

Posted

技术标签:

【中文标题】Qt-opengl-debug-SIGSEGV-如何修复?【英文标题】:Qt-opengl-debug-SIGSEGV-how to fix? 【发布时间】:2014-10-24 09:45:40 【问题描述】:

我按照教程进行操作:https://www.youtube.com/watch?v=1nzHSkY4K18

1/test_opengl.pro

===============================================

        QT       += core gui opengl
        
        greaterThan(QT_MAJOR_VERSION, 4): QT += widgets
        
        TARGET = test_opengl
        TEMPLATE = app
        
        
        SOURCES += main.cpp\
                mainwindow.cpp \
            glwidget.cpp
        
        HEADERS  += mainwindow.h \
            glwidget.h
        
        FORMS    += mainwindow.ui

================================================ =

2/glwidget.h

================================================ =

        #ifndef GLWIDGET_H
        #define GLWIDGET_H
        
        #include <QGLWidget>
        
        class GLWidget : public QGLWidget
        
            Q_OBJECT
        public:
            explicit GLWidget(QWidget *parent = 0);
        
            void initializeGL();
            void paintGL();
            void resizeGL(int w, int h);
        ;
        
        #endif // GLWIDGET_H

================================================ ==============

3/mainwindow.h

================================================ ==============

    #ifndef MAINWINDOW_H
    #define MAINWINDOW_H
    
    #include <QMainWindow>
    
    namespace Ui 
    class MainWindow;
    
    
    class MainWindow : public QMainWindow
    
        Q_OBJECT
    
    public:
        explicit MainWindow(QWidget *parent = 0);
        ~MainWindow();
    
    private:
        Ui::MainWindow *ui;
    ;
    
    #endif // MAINWINDOW_H

================================================ ==============

4/glwidget.cpp

================================================ ==============

   #include "glwidget.h"
    
    GLWidget::GLWidget(QWidget *parent) :
        QGLWidget(parent)
    
    
    
    void GLWidget::initializeGL()
    
    
    
    void GLWidget::paintGL()
    
    
    
    void GLWidget::resizeGL(int w, int h)
    
    
    

================================================ ==============

5/main.cpp

================================================ ==============

   #include "mainwindow.h"
    #include <QApplication>
    
    int main(int argc, char *argv[])
    
        QApplication a(argc, argv);
        MainWindow w;
        w.show();
    
        return a.exec();
    

================================================ ==============

6/mainwindow.cpp

================================================ ==============

   #include "mainwindow.h"
        #include "ui_mainwindow.h"
        
        MainWindow::MainWindow(QWidget *parent) :
            QMainWindow(parent),
            ui(new Ui::MainWindow)
        
            ui->setupUi(this);
        
        
        MainWindow::~MainWindow()
        
            delete ui;
        

================================================ ==============

7/mainwindow.ui

================================================ ==============

            <?xml version="1.0" encoding="UTF-8"?>
        <ui version="4.0">
         <class>MainWindow</class>
         <widget class="QMainWindow" name="MainWindow">
          <property name="windowModality">
           <enum>Qt::ApplicationModal</enum>
          </property>
          <property name="geometry">
           <rect>
            <x>0</x>
            <y>0</y>
            <width>555</width>
            <height>365</height>
           </rect>
          </property>
          <property name="sizePolicy">
           <sizepolicy hsizetype="Preferred" vsizetype="Preferred">
            <horstretch>0</horstretch>
            <verstretch>0</verstretch>
           </sizepolicy>
          </property>
          <property name="windowTitle">
           <string>Opengl</string>
          </property>
          <widget class="QWidget" name="centralWidget">
           <layout class="QHBoxLayout" name="horizontalLayout">
            <item>
             <widget class="GLWidget" name="widget" native="true">
              <property name="sizePolicy">
               <sizepolicy hsizetype="Expanding" vsizetype="Preferred">
                <horstretch>0</horstretch>
                <verstretch>0</verstretch>
               </sizepolicy>
              </property>
             </widget>
            </item>
            <item>
             <layout class="QVBoxLayout" name="verticalLayout">
              <item>
               <spacer name="verticalSpacer">
                <property name="orientation">
                 <enum>Qt::Vertical</enum>
                </property>
                <property name="sizeHint" stdset="0">
                 <size>
                  <width>20</width>
                  <height>40</height>
                 </size>
                </property>
               </spacer>
              </item>
              <item>
               <widget class="QPushButton" name="pushButton">
                <property name="text">
                 <string>&amp;Quit</string>
                </property>
               </widget>
              </item>
             </layout>
            </item>
           </layout>
          </widget>
         </widget>
         <layoutdefault spacing="6" margin="11"/>
         <customwidgets>
          <customwidget>
           <class>GLWidget</class>
           <extends>QWidget</extends>
           <header>glwidget.h</header>
           <container>1</container>
          </customwidget>
         </customwidgets>
         <resources/>
         <connections>
          <connection>
           <sender>pushButton</sender>
           <signal>clicked()</signal>
           <receiver>MainWindow</receiver>
           <slot>close()</slot>
           <hints>
            <hint type="sourcelabel">
             <x>383</x>
             <y>342</y>
            </hint>
            <hint type="destinationlabel">
             <x>390</x>
             <y>230</y>
            </hint>
           </hints>
          </connection>
         </connections>
        </ui>

================================================ ==============

调试时,我得到了:

下级停止了,因为它收到了来自操作系统的信号。

信号名称:SIGSEGV

信号含义:分段错误

这个在反汇编器上??

0x143d1fa6 ----------- 83 80 40 01 00 00 ff-------------addl ----- $0xffffffff,0x140(%eax)

“非法访问内存”、“未初始化的指针”有什么问题吗?我该如何解决? 我使用 Qt5.3.2,mingw,window 7 32bit。我的屏幕:http://postimg.org/image/pspg5e0g7/

【问题讨论】:

是否有堆栈框架或至少一个模块崩溃?因为我无法重现那个错误 我不知道。我怎样才能找到那个模块并修复它? 您在调试窗口中查看模块和堆栈帧。 I looks like: this。您可以通过查看地址来查看它是哪个模块(例如查看两个 0x143d1fa6 之间) 0 ?? C:\Windows\system32\ig4icd32.dll 0x143d1fa6 1 ?? 0xabababab 这是您的英特尔 OpenGL 驱动程序。你能在调用堆栈中看到调用了什么(很可能是 GLWidget,但是是哪个函数)? 【参考方案1】:

我认为我的驱动程序有问题,我尝试删除并设置 Qt 但旧版本(Qt 4.8.6)并且它正在运行。

【讨论】:

以上是关于Qt-opengl-debug-SIGSEGV-如何修复?的主要内容,如果未能解决你的问题,请参考以下文章

如何为 iOS 项目创建类引用,如 NSDictionary 类引用 - Apple Developer

如何生成 4 位唯一 id,如 discord id,如 #8052

如何为 pytz 处理 POSIX 时区信息(如 CST)?

Python如何用字符串键索引多维数组,如字典

交互PopGesture时如何处理UITabBarController的子视图(如Flipboard)

如何用线条路径绘制CALayer,如模拟橡皮擦效果?