调试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,具体取决于执行日志记录的文件类型。另请参阅 调试技术 。Assert
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"); // 第一部分 console.timeEnd("firstPart"); // 第二部分 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的性能分析器。不支持嵌套调用,并在控制台中打印警告。ProfileEnd
console.profileEnd关闭 QML 和 JavaScript 分析器。在没有先调用console.profile的情况下调用此函数会在控制台中打印警告。在此调用之前需要附加一个分析客户端以接收和存储分析数据。例如:
function f() { console.profile(); //调用一些需要进行分析的函数。 //确保在结束分析会话之前附加了客户端。 console.profileEnd(); }异常
console.exception打印错误信息以及调用时JavaScript执行的堆栈跟踪。
或者,可以将日志类别作为第一个参数传递给任何这些console函数。有关更多详细信息,请参阅LoggingCategory。
调试模块导入¶
设置 QML_IMPORT_TRACE 环境变量以启用 QML 导入加载机制的调试输出。
例如,对于一个像这样的简单QML文件:
如果你在运行QML Runtime Tool或你的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安装过程中,会自动安装用于在设备上调试和分析QML应用程序所需的qmltooling插件。必须将这些插件部署到设备上,才能使调试和分析功能正常工作。
启用基础设施¶
当你编译你的应用程序时,你必须明确启用调试基础设施。如果你使用qmake,你可以将配置参数添加到项目的.pro文件中:
Qt Quick 1:
CONFIG+=declarative_debugQt Quick 2:
CONFIG+=qml_debug
如果您使用其他构建系统,可以将以下定义传递给编译器:
Qt Quick 1:
QT_DECLARATIVE_DEBUGQt Quick 2:
QT_QML_DEBUG
注意
启用调试基础设施可能会损害您的应用程序和系统的完整性,因此,您应仅在受控环境中启用它。当基础设施启用时,应用程序会显示以下警告:
QML 调试 已启用。 仅在安全环境中使用此功能。
启动应用程序¶
要启用调试——无论是从一开始还是稍后附加调试器——请使用以下参数启动应用程序:
-qmljsdebugger=port:
其中:
强制性的
port_from指定调试端口或当指定port_to时的端口范围的起始端口可选的
ip address指定了应用程序运行的主机的IP地址可选的
block防止应用程序在调试客户端连接到服务器之前运行可选的
file指定本地套接字。可选的
services指定要启用的服务;默认情况下会启用所有找到的服务。请注意,v4 debug服务会禁用 JIT。
应用程序成功启动后,显示以下消息:
QML 调试器: 正在等待 连接 在 端口 或 QML 调试器: 正在连接 到 套接字 在
连接到应用程序¶
当应用程序运行时,实现二进制协议的IDE或工具可以连接到开放的端口。
Qt 提供了一个 qmlprofiler 命令行工具来捕获分析数据到文件中。要运行此工具,请输入以下命令:
qmlprofiler -p
使用Qt Creator进行调试¶
Qt Creator 使用调试基础设施来调试、检查和分析桌面以及远程设备上的 Qt Quick 应用程序。Qt Creator 提供了集成的客户端,用于调试 JavaScript、检查对象树以及分析 QML 引擎的活动。更多信息,请参见 Qt Creator: Debugging Qt Quick Projects。