调试QML应用程序#
提供有关如何使用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方法生成的,日志类别为
qml
或js
,具体取决于进行日志记录的文件类型。另请参阅调试技术。断言
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"); }上面的代码示例在每次运行
f()
时打印f called: 1
,f called: 2
……分析
console.profile
开启QML和JavaScript分析器。不支持嵌套调用,并在控制台打印警告信息。分析结束
console.profileEnd
关闭QML和JavaScript分析器。在调用此函数之前,需要附加分析客户端以接收和存储分析数据。例如
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
函数的第一个参数传递。有关更多信息,请参阅日志类别。
调试模块导入#
将环境变量 QML_IMPORT_TRACE
设置为启用 QML 的导入加载机制的调试输出。
例如,对于以下简单的 QML 文件
如果运行 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 端口或本地套接字提供调试、检查和剖析应用程序的服务。
注意
安装 Qt 时将自动安装所需的 qmltooling
插件,以便在设备上调试和剖析 QML 应用程序。它们必须部署到设备上才能使调试和剖析功能正常工作。
启用基础设施#
在编译应用程序时,必须显式启用调试基础设施。如果您使用 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:<port_from>[,port_to][,host:<ip address>][,block][,file:<local socket>][,services:<comma-separated list of services to enable>]
其中
强制性的
port_from
指定调试端口或当指定port_to
时端口的起始端口可选的
ip address
指定运行应用程序的主机的 IP 地址可选的
block
防止应用程序运行,直到调试客户端连接到服务器可选的
file
指定本地套接字。可选的
services
指定要启用的服务;默认值是找到的所有服务。注意,v4 debug
服务禁用 JIT。
应用程序成功启动后,将显示以下消息
QML 调试器: 在端口 <port_number> 等待连接
或 QML 调试器: 正在连接到 套接字 <file>"
连接到应用程序#
当应用程序运行时,IDE或实现了二进制协议的工具可以连接到打开的端口。
Qt 提供了一个 qmlprofiler
命令行工具,用于将配置文件数据捕获到文件中。要运行此工具,请输入以下命令
qmlprofiler -p <port> -attach <ip address>
使用 Qt Creator 进行调试#
Qt Creator 使用调试基础设施来调试、检查和性能分析桌面以及远程设备上的 Qt Quick 应用程序。Qt Creator 提供了用于调试 JavaScript、检查对象树和性能分析 QML 引擎活动的集成客户端。有关更多信息,请参阅 Qt Creator:调试 Qt Quick 项目 。