我正在我的嵌入式Linux系统(基于TI AM335x)上运行一个Qt5.4.0应用程序,但它停止了运行,我很难调试这个问题。这是一个QtWebKit QML示例(youtubeview),但其他QtWebKit示例也对我产生了相同的表现,所以是基于WebKit的系统问题。
当我运行应用程序时,它运行了一两秒钟,然后结束了,没有任何消息报告到syslog或dmesg中。当我使用strace启动它时,我可以看到这个futex消息:
futex(0x2d990, FUTEX_WAKE_PRIVATE, 1) = 0
futex(0x2d9ac, FUTEX_WAIT_PRIVATE, 7, NULL <unfinished ...>
+++ exited with 1 +++
然后它停止了。没有什么帮助......我的下一个想法是用GDB调试,但是当我尝试运行以下命令时,GDB会崩溃:
-sh-4.2# gdb youtubeview GNU gdb (GDB) 7.5 Copyright (C) 2012 Free Software Foundation, Inc. ... (gdb) run Starting program: /usr/share/qt5/examples/webkitqml/youtubeview/youtubeview /home/mike/ulf_qt_450/ulf/build-ulf/out/work/armv7ahf-vfp-neon-linux-gnueabihf/gdb/7.5-r0.0/gdb-7.5/gdb/utils.c:1081: internal-error: virtual memory exhausted: can't allocate 64652911 bytes. A problem internal to GDB has been detected,
即使我首先在main设置断点,只要它开始运行,它就会被卡住并耗尽内存。
这个问题即使我设置了main的断点也会发生。有没有其他工具或技术可以在此处使用以帮助隔离问题?也许是GDB的参数来限制内存使用或提供有关为什么Qt程序导致崩溃的更多信息?也许有一些FD或系统变量可以用来找出为什么FUTEX被持有和失败?
我现在不确定该怎么解决这个问题。Qt代码本身非常简单,我不预期在这里会有任何问题:
#include <QGuiApplication>
#include <QQuickView>
int main(int argc, char* argv[])
{
QGuiApplication app(argc,argv);
QQuickView view;
view.setSource(QUrl("qrc:///" QWEBKIT_EXAMPLE_NAME ".qml"));
view.setResizeMode(QQuickView::SizeRootObjectToView);
view.show();
return app.exec();
return 0;
}