2015-10-16 99 views
1

我得到SIGABRT权在main()开始的时候我打电话:永久SIGABRT时以前运行正常

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

这是回溯

>~"#0 0x00007ffff1293cc9 in __GI_raise ([email protected]=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()看起来相同(不同的包括库依赖项)。

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

UPDATE:

我发誓,我没有改变任何东西,我用git的差异检查 - 空。我长期使用这个提交 - 它可以持续运行好几天。

这是它显示消息:

QXcbConnection:无法连接到显示

此外 - 在GDB运行时,当我从终端运行./app其运行良好, 其运行良好..

,但不能从QtCreator-GDB或者只是在不脱离QtCreator(按Ctrl + R)的gdb运行..

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

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

+0

使用调试器? –

+0

完全清洁和重建。 – Bowdzone

+0

它不仅仅是一个崩溃它是致命的退出('QMessageLogger :: fatal'):错误消息和中止。你应该看到一些有用的控制台消息。 –

回答

1

消息QXcbConnection: Could not connect to display意味着应用程序无法连接到X显示。在这种情况下,它试图连接的显示器的名称是空的(该名称应该遵循该消息)。

显示名称可以通过环境变量DISPLAY传递给应用程序,也可以由应用程序的命令行参数-display ' '覆盖:

./app-binary -display ' ' 

检查外壳的正确DISPLAY值:

echo $DISPLAY 

通过打印,在Qt Creator中的QApplication app(argc, argv);之前的运行时检查应用程序中该变量的值:

qDebug() << qgetenv("DISPLAY"); 
// or 
qDebug() << QProcessEnvironment::systemEnvironment().toStringList(); 

该打印应该包含类似"DISPLAY=:0"(与从shell执行期间的值相同)。

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