以前运行时,QApplication构造函数中的永久sigabrt

时间:2015-10-16 11:28:17

标签: c++ linux 64-bit qt-creator qt5.5

当我打电话给main()时,我正在获得sigabrt:

int main(int argc, char *argv[])
{
    QApplication app(argc, argv);//here
...

这是回溯

>~"#0  0x00007ffff1293cc9 in __GI_raise (sig=sig@entry=6) at ../nptl/sysdeps/unix/sysv/linux/raise.c:56\n"
>~"#1  0x00007ffff12970d8 in __GI_abort () at abort.c:89\n"
>~"#2  0x00007ffff213a0be in QMessageLogger::fatal(char const*, ...) const () from /opt/Qt/5.5/gcc_64/lib/libQt5Core.so.5\n"
>~"#3  0x00007fffe78f7956 in QXcbConnection::QXcbConnection(QXcbNativeInterface*, bool, unsigned int, char const*) () from /opt/Qt/5.5/gcc_64/lib/libQt5XcbQpa.so.5\n"
>~"#4  0x00007fffe78fb066 in QXcbIntegration::QXcbIntegration(QStringList const&, int&, char**) () from /opt/Qt/5.5/gcc_64/lib/libQt5XcbQpa.so.5\n"
>~"#5  0x00007fffe7c0e39b in ?? () from /opt/Qt/5.5/gcc_64/plugins/platforms/libqxcb.so\n"
>~"#6  0x00007ffff2e5f762 in QPlatformIntegrationFactory::create(QString const&, QStringList const&, int&, char**, QString const&) () from /opt/Qt/5.5/gcc_64/lib/libQt5Gui.so.5\n"
>~"#7  0x00007ffff2e6a9a8 in QGuiApplicationPrivate::createPlatformIntegration() () from /opt/Qt/5.5/gcc_64/lib/libQt5Gui.so.5\n"
>~"#8  0x00007ffff2e6b75d in QGuiApplicationPrivate::createEventDispatcher() () from /opt/Qt/5.5/gcc_64/lib/libQt5Gui.so.5\n"
>~"#9  0x00007ffff233da36 in QCoreApplication::init() () from /opt/Qt/5.5/gcc_64/lib/libQt5Core.so.5\n"
>~"#10 0x00007ffff233da96 in QCoreApplication::QCoreApplication(QCoreApplicationPrivate&) () from /opt/Qt/5.5/gcc_64/lib/libQt5Core.so.5\n"
>~"#11 0x00007ffff2e6d9a9 in QGuiApplication::QGuiApplication(QGuiApplicationPrivate&) () from /opt/Qt/5.5/gcc_64/lib/libQt5Gui.so.5\n"
>~"#12 0x00007ffff5ca392d in QApplication::QApplication(int&, char**, int) () from /opt/Qt/5.5/gcc_64/lib/libQt5Widgets.so.5\n"
>~"#13 0x0000000000435889 in main (argc=1, argv=0x7fffffffec48) at ..../gui/main.cpp:14\n"

以前代码工作正常(几分钟前),我检查了md5的库并与另一台PC进行了比较(使用相同的库,运行应用程序正常) - 没有发现差异。

我找到了一些bug,但不确定它是否已连接。

我创建了新的Qt项目并且运行正常 - main()看起来相同(不同包括库依赖项)。

任何想法我接下来要尝试什么?

更新:

我发誓我没有改变任何东西,我用git diff检查 - 空。这个提交我已经使用了很长时间 - 它运行了好几天。

这是它显示的消息:

  

QXcbConnection:无法连接到显示

另外 - 当我从终端./app运行它运行良好, 从gdb运行时运行正常..

但无法从QtCreator-gdb运行或只是没有来自QtCreator的gdb(Ctrl + R)..

现在它在另一台计算机上犯了同样的错误 - 新安装的Qt 5.5,新建,也新建了另一个库.. 然后我删除了整个阴影目录并重建,错误消失了......很奇怪。

我做了同样的rm -rf shadow-dir/*并运行qmake并在我的原始计算机上构建 - 同样的错误。

1 个答案:

答案 0 :(得分:1)

消息Array ( [0] => Array ( [0] => House [1] => Street [2] => Plain ) [1] => Array ( [0] => By [1] => By [2] => ) ) 表示应用程序无法连接到X Display。在这种情况下,它尝试连接的显示的名称是空的(名称应该跟在消息之后)。

显示名称可以通过环境变量QXcbConnection: Could not connect to display传递给应用程序,也可以被应用程序命令行参数DISPLAY覆盖:

-display ' '

检查shell中正确的./app-binary -display ' ' 值:

DISPLAY

通过打印在Qt Creator中echo $DISPLAY 之前的运行时检查应用程序中该变量的值:

QApplication app(argc, argv);

该打印应包含类似qDebug() << qgetenv("DISPLAY"); // or qDebug() << QProcessEnvironment::systemEnvironment().toStringList(); 的内容(与从shell执行时的值相同)。

Qt创建者项目选项可以覆盖系统环境。