2015-10-16 97 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創建者項目選項可以覆蓋系統環境。