2012-11-13 62 views
8

需要在应用程序中编译哪些Qt/QML软件才能调试/配置QML?如何Qt - Qml调试和/或分析?

我目前的应用程序是使用cmake构建,并在嵌入式设备上运行。此外,我开始使用Qt 4.8.3(直到现在4.7.0)。

我想用这些花哨/很酷的功能(对于嵌入式开发人员):

http://doc.qt.digia.com/qtcreator/creator-qml-performance-monitor.html

我搜索槽qt-project寻求帮助,但什么是我没有得到明确当您想要使用自定义构建环境调试/分析远程应用程序时所需的步骤。

所以,我想知道是否需要以下任何步骤,并且在正面情况下,实际上需要的代码是什么。

  • Qt库./configure特定选项。
  • QtCreator附加/启动到远程应用程序的特定选项。
  • Cmake包含最终应用程序可执行文件所需的库和库。

欢迎任何帮助,链接等。

回答

12

随着Qt 4.8的这很容易。所有必需的库现在都是Qt本身的一部分,您不必为自己的Qt版本构建调试库。

我正在开发同样使用CMake构建的Qt/QML桌面应用程序。我不得不完成以下步骤启用QML调试:

  1. 包括调试使能到我的应用程序的启动代码

    #include <QtDeclarative/qdeclarativedebug.h> 
    
        /* [...] */ 
    
        QDeclarativeDebuggingEnabler enabler; 
    
  2. 添加QML_DISABLE_OPTIMIZER=1到执行环境我的应用程序的

    这可以在项目页面的执行选项卡中的Qt Creator中完成。

  3. 勾选复选框QML调试在执行标签

    这增加了所需的命令行参数Qt创建者和嵌入在应用

的QML调试器部件之间的通信还发现如果一切顺利,应用程序会以调试模式启动以下输出:

Qml调试已启用。只能在安全的环境中使用!
QDeclarativeDebugServer:等待在端口3768连接...
QDeclarativeDebugServer:已建立的连接

之后,我能够设置断点和检查变量。此外,通过分析页面访问的分析器刚刚工作。

当你开发一个嵌入式应用程序时,你的情况显然要复杂一点。

Qt创建者不支持在嵌入式平台上部署和执行基于CMake的项目。你必须自己做。不要忘了所需的参数传递给您的应用程序来配置QML调试:

$ your-app -qmljsdebugger=port:3768,block 

为Qt Creator的附加为分析会话使用远程运行应用程序在“分析”对应的“外部”条目菜单在Qt Creator主菜单中。 “Debug”>“Debug”下的“Connect to Debug-Server”进行调试的同样选项在哪里。

+1

我已经成功地在QML分析器上首次看到应用程序数据。我没有使用第3点,我只是点击了Analyza-> QML Profiler。现在,第一次测试后,我得到“QDeclarativeDebugServer:另一个客户端已连接”。这是可以避免的还是我需要重置我的应用程序? – kikeenrique

+0

我自己还没有看到这个消息,看起来你尝试调试/配置文件相同的应用程序实例两次,现在允许。我无法帮助您,因为这不会发生在我的桌面应用程序中。 – sebasgo

2

这里是一个“干净”的替代@sebasgo's answer,第1项

如果使用QT5与QtQuick2,你只需要包括QtQuick在一些文件之前定义QT_QML_DEBUG(它不会不管什么文件,如只要它是可执行文件的一部分)。例如,它足以启动main.cpp用线:

#define QT_QML_DEBUG 
#include <QtQuick> 

它不会伤害你,而不是使用编译器的-DQT_QML_DEBUG标志(例如,通过QMAKE DEFINES或CMake的add_definitions指令),可能仅在调试版本。

如果您遇到传统QtQuick1(Qt5或Qt4),请使用QT_DECLARATIVE_DEBUG宏。

#define QT_DECLARATIVE_DEBUG 
#include <QtDeclarative> 

对于好奇,这里是一个相关的Qt源,短,不言自明的:

-2

有了Qt 5.1新功能qInstallMessageHandler已添加。 它可以让你捕捉并记录错误和警告,以便你可以随意处理它们。

+0

您的链接和说明指出它是在QT 5.0中引入的 – kikeenrique

+0

此外,这不适用于QML,无需进一步更改... –

6

我使用的是Qt 5,它变得更加简单。被要求在我身边只是这一步做QML分析:

#include <QQmlDebuggingEnabler> 

... 

QQmlDebuggingEnabler enabler; 
+0

我也使用QT 5,但我得到了“没有这样的文件或目录”的错误 什么可能是问题?我应该安装更多的东西吗? – MeM

+0

@MeM:很难说这个......我建议你用这个问题和更多的信息开一个新的问题...... –

3

检查docs都给答案似乎是不必要的。此外,它在发行版中硬编码调试代码。我不知道为什么QQmlDebuggingEnabler将是必要的,但如果您检查代码herehere,您将认识到,QQmlDebuggingEnabler的安装是而不是必要的。只需包括QQmlDebuggingEnabler并设置QT_QML_DEBUG标志,例如像这样(CMake的)

set(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} -DQT_QML_DEBUG ")

然而,根据docsQQmlDebuggingEnabler是没有必要的。

Furtermore:剖析未优化的代码是没有意义的。

对于我来说,将QT_QML_DEBUG设置为标志并选中QML调试复选框就足够了。