调试 QML 应用
当您使用 QML 开发应用程序时,有很多方法可以帮助调试可能遇到的问题。下文将描述可用的调试工具及其使用方法。
控制台 API
功能 | 描述 |
---|---|
日志 | 使用 console.log ,console.debug ,console.info ,console.warn 或 console.error 将调试信息打印到控制台。例如 function f(a, b) { console.log("a is ", a, "b is ", b); } 输出由 C++ 中的 qCDebug,qCWarning 或 qCCritical 方法生成,类别为 |
断言 | console.assert 测试一个表达式是否为真。如果不是,它将一个可选的消息写入控制台并打印堆栈跟踪。例如 function f() { var x = 12 console.assert(x == 12, "This will pass"); console.assert(x > 12, "This will fail"); } |
计时器 | console.time 和 console.timeEnd 记录两个调用之间的时间(以毫秒为单位)。二者都接受一个字符串参数,用于标识测量。例如 function f() { console.time("wholeFunction"); console.time("firstPart"); // first part console.timeEnd("firstPart"); // second part console.timeEnd("wholeFunction"); } |
跟踪 | console.trace 打印在调用时刻的 JavaScript 执行的堆栈跟踪。此堆栈跟踪信息包含函数名称、文件名、行号和列号。堆栈跟踪限制为最后 10 个栈帧。 |
计数 | console.count 打印出特定代码片段运行当前次数及消息。例如 function f() { console.count("f called"); } 如上代码示例在运行 |
性能分析 | console.profile 启用 QML 和 JavaScript 性能分析器。不支持嵌套调用,并在控制台打印警告。 |
性能分析结束 | console.profileEnd 关闭 QML 和 JavaScript 性能分析器。在没有先调用 console.profile 时调用此函数会在控制台上打印警告。在执行此调用之前,需要连接性能分析客户端以接收和存储性能数据。例如 function f() { console.profile(); //Call some function that needs to be profiled. //Ensure that a client is attached before ending //the profiling session. console.profileEnd(); } |
异常 | console.exception 打印一个错误消息以及在调用时刻的 JavaScript 执行的堆栈跟踪。 |
或者,可以将 日志分类 作为任何这些 console
函数的第一个参数传递。有关更多详细信息,请参阅 LoggingCategory。
调试模块导入
设置 QML_IMPORT_TRACE
环境变量以启用 QML 的导入加载机制中的调试信息输出。
例如,对于一个简单的 QML 文件,如下所示
import QtQuick Rectangle { width: 100; height: 100 }
如果您在运行 QML 运行时工具 或您的 QML C++ 应用程序之前设置 QML_IMPORT_TRACE=1
,您将看到类似如下的输出
QQmlImportDatabase::addImportPath "/qt-sdk/imports" QQmlImportDatabase::addImportPath "/qt-sdk/bin/QMLViewer.app/Contents/MacOS" QQmlImportDatabase::addToImport 0x106237370 "." -1.-1 File as "" QQmlImportDatabase::addToImport 0x106237370 "Qt" 4.7 Library as "" QQmlImportDatabase::resolveType "Rectangle" = "QDeclarativeRectangle"
QML 调试基础结构
Qt Qml模块提供通过TCP端口或本地套接字进行应用调试、检查和性能分析的服务。
注意: 用于在设备上调试和性能分析QML应用所需的qmltooling
插件在安装Qt时自动安装。它们必须部署到设备上,调试和性能分析才能正常工作。
启用基础设施
编译您的应用程序时,必须显式启用调试基础设施。如果您使用qmake,可以将配置参数添加到项目的.pro
文件中
- Qt Quick 1:
CONFIG+=declarative_debug
- Qt Quick 2:
CONFIG+=qml_debug
如果您使用其他构建系统,可以将以下定义传递给编译器
- Qt Quick 1:
QT_DECLARATIVE_DEBUG
- Qt Quick 2:
QT_QML_DEBUG
注意: 启用调试基础设施可能会损害您应用程序和系统的完整性,因此,您应该只在受控环境中启用它。当基础设施启用时,应用程序会显示以下警告
QML调试已启用。仅在安全环境中使用。
启动应用程序
要启用调试 – 从启动或稍后附加调试器 – 使用以下参数启动应用程序
-qmljsdebugger=port:<端口号>[,端口号][,host:<IP地址>][,block][,file:<本地套接字>][,services:<以逗号分隔的服务列表以启用>]
其中
- 强制性的
port_from
指定了调试端口,或者当指定port_to
时,指定了一系列端口的起始端口 - 可选的
ip address
指定了应用程序运行的主机的IP地址 - 可选的
block
阻止应用程序运行,直到调试客户端连接到服务器 - 可选的
file
指定了本地套接字。 - 可选的
services
指定了要启用的服务;默认值是找到的所有服务。注意,v4 debug
服务禁用了JIT。
应用程序成功启动后,会显示以下消息
QML调试器:在端口 <端口号> 等待连接
或QML调试器:连接到 <文件> 上的套接字
连接到应用程序
当应用程序运行时,IDE或实现了二进制协议的工具可以连接到开放的端口。
Qt提供了一个qmlprofiler
命令行工具,用于捕获文件中的性能数据。要运行此工具,请输入以下命令
qmlprofiler -p <端口> -attach <IP地址>
使用Qt Creator进行调试
Qt Creator使用调试基础设施来调试、检查和性能分析桌面以及远程设备上的Qt Quick应用程序。Qt Creator为调试JavaScript、检查对象树和性能分析QML引擎的活动提供了集成客户端。更多信息,请参阅Qt Creator:调试Qt Quick项目。
© 2024 Qt公司有限公司。本文档中包含的贡献内容均为各自所有者的版权。提供的文档受自由软件基金会发布的GNU自由文档许可协议版本1.3的条款约束。Qt及其相关标志是芬兰及/或其他国家Qt公司有限公司的商标。所有其他商标均为其各自所有者的财产。