10

需要在应用程序中编译哪些软件 Qt/QML 片段才能调试/分析 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 包含最终应用程序可执行文件中所需的库。

欢迎任何帮助、链接等。

4

5 回答 5

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 Creator 和嵌入在应用程序中的 QML 调试器组件之间的通信添加了所需的命令行参数

如果一切顺利,如果在调试模式下启动,应用程序会向您显示以下输出:

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

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

当您开发嵌入式应用程序时,您的情况显然有点复杂。

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

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

要将 Qt Creator 附加到远程运行的应用程序以进行分析会话,请使用 Qt Creator 主菜单中“分析”菜单中的相应“外部”条目。在“调试”>“调试”下使用“连接到调试服务器”进行调试的同样选项在哪里。

于 2012-11-18T12:15:43.113 回答
7

我正在使用 Qt 5,它变得更加容易。我只需要这一步来进行 QML 分析:

#include <QQmlDebuggingEnabler>

...

QQmlDebuggingEnabler enabler;
于 2013-08-09T16:15:50.693 回答
5

检查文档所有给出的答案似乎是不必要的。此外,它在版本中对调试代码进行硬编码。我不知道为什么QQmlDebuggingEnabler有必要,但如果你在这里这里检查代码,你会认识到,实例化QQmlDebuggingEnabler没有必要的。只需包含QQmlDebuggingEnabler并设置QT_QML_DEBUG标志,例如这样(CMake)

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

但是根据文档 QQmlDebuggingEnabler是没有必要的。

此外:分析未优化的代码毫无意义。

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

于 2016-01-21T15:13:18.720 回答
3

这是@sebasgo 的答案第 1 项的“更清洁”替代方案。

如果您将 Qt5 与 QtQuick2 一起使用,您只需要QT_QML_DEBUG在包含QtQuick某个文件之前定义(无论是什么文件,只要它是可执行文件的一部分即可)。例如,从以下几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 源代码,简短且不言自明:

于 2013-06-16T16:16:56.787 回答
-2

在 Qt 5.1 中,添加了新功能qInstallMessageHandler。它可以让您捕获并记录错误和警告,以便您可以随心所欲地处理它们。

于 2013-07-22T16:59:55.960 回答