我在我的嵌入式 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
版权所有 (C) 2012 Free Software Foundation, Inc.
...
(gdb) 运行
启动程序:/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:内部错误:虚拟内存耗尽:无法分配 64652911 字节。
检测到 GDB 内部的问题,
即使我首先在 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;
}