添加链接
link管理
链接快照平台
  • 输入网页链接,自动生成快照
  • 标签化管理网页链接
相关文章推荐
爱看书的小狗  ·  ulimit -c unlimited - ...·  8 月前    · 
阳光的酱肘子  ·  Kubernetes系统精讲 ...·  1 年前    · 
英姿勃勃的小笼包  ·  zsh: command not ...·  2 年前    · 
风流的书签  ·  BufferedWriter.write() ...·  2 年前    · 

Subscribe to Our Blog

Stay up to date with the latest marketing, sales and service tips and news.

  • Subscribe via Email
  • 原文链接 Christiaan Janssen QML Profiler update

    Qt Quick带来了许多灵活快速的开发方式。传统的方式需要不停的进行“编译、打包、部署、运行”的循环,而现在,使用Qt Quick,就算是在运行时您也可以对源码做出增量修改!在Qt Creator的一个又一个版本中,我们努力更好的释放Qt Quick的能量。然而,任何编程语言都有其缺点。QML中脚本的编译错误与运行时错误,有时您总是在QtDeclarative的绑定循环上绕圈子,以及JavaScript的那些您不想被卷入的阴暗角落等等……所有的这些潜在的陷阱意味着您真心希望能有一把称手的调试、分析、检查的武器:)

    本篇博客的重点是调试与那些最简洁的调试技术:控制台API。很有可能您已经在您最初的helloworld.qml文件中使用过它了:console.log()是调试技术的一部分。最近我们用 FireBug控制台API (事实上的网络浏览器标准)中的一些最有用的方法更新了Qt 5。

    从Qt Quick 1.0起我们已经支持了console.log和console.debug。QtScript里的print()函数仍然有效,但是在网络浏览器中执行JavaScript代码时它有略微不同的含义,所以尽量别用它。我们给Qt 5多添加了几个日志函数。所有这些调用都会被转发给它们在Qt中对应的部分:

    JavaScript函数 Qt/C++副本 console.log() qDebug() console.debug() qDebug() console.info() qDebug() console.warn() qWarning() console.error() qCritical()

    是的,眼下console.log()、console.debug()以及console.info()具有相同的功能!因为它们是最常用的方法并且被无数JS代码片段使用,所以我们选择了支持他们。也许我们应该进一步考虑在qlogging.h中添加额外的日志等级;)

    想要知道一段特定代码的执行需要多少时间?在您的onCompleted方法中写个逻辑例子。

    Component.onCompleted() {
    console.time("onCompleted");
    // ...
    console.timeEnd("onCompleted");

    会以毫秒输出耗时。字符串参数既是特定测量(也可以是交叉测量)的识别码,也是输出的前缀:

    onCompleted: 401ms

    如果需要深入点的分析,可以使用console.profile()、console.profileEnd()。

    Component.onCompleted() {
    console.profile();
    Component.onDestruction() {
    console.profileEnd();

    这一对API分析了QDeclarativeEngine的状态与V8的方法调用。然而为了取回数据,你必须在调用console.profileEnd()之前将QML分析工具连接到您的程序否则会丢失分析数据。 Christiaan Janssen 已经在之前的 博文 中描述了Qt Creator中的QML分析工具。在Qt 5中会有一个独立的分析工具把分析数据存入文件之中。之后我们就可以使用Qt Creator来读取这种文件。

    再说几句……

    我们还引入了如下这些API:

    console.assert() : 测试一个表达式,可选地输出信息并且当表达式评估为否的时候输出JavaScript执行的堆栈跟踪。

    console.exception(): 输出错误信息以及JavaScript执行的堆栈跟踪。

    console.trace(): 输出在调用点的JavaScript执行的堆栈跟踪。

    console.count(): 附在用户提供的信息之后输出当前函数被调用的次数。

    脚本控制台 – 新的化身

    早在Qt Creator 2.1中就引入了QML控制台。然而它是个受限于只能评估简单表达式的简化控制台。我们认为Qt Quick2的开发人员需要一个更先进的控制台来释放QML的潜力。

    我们郑重向您介绍QML控制台的新化身——脚本控制台。

    Qt Creator的脚本控制台

    除了评估表达式之外,脚本控制台以更漂亮的方式显示了调试输出,包括Qt调试信息和JavaScript控制台信息。;)您可以使用位于右上角的过滤按钮来查看您需要的记录。如果您只想查看错误(Error),那么请取消信息(Info)和警告(Warning)的选中,瞧!调试输出同样显示了文件与行数信息,在其上点击会在编辑器中打开对应文件同时光标移到对应的行数。不用再在调试信息里面添加上下文信息来在原文件中定位了!您也可以时刻用Find工具栏在控制台中搜索文字。

    JavaScript对象与数组在控制台中以可展开树的方式表示。用来评估表达式的当前上下文显示在状态栏上。脚本控制台甚至可以在非调试断点处使用,检查、评估QML元素与表达式。脚本控制台支持多行输入;还能够记忆之前的输入,这样就不用再去输入那些真的很长的表达式了。

    最棒的就是无需等待太长时间,脚本控制台作为Qt Creator 2.5的一部分发布!

    少了点什么?

    目前我们还没有实现处理控制台的方法,是因为如果您的控制台只是命令行的话实现这些方法没太大的意义。比如,很难以一种可移植的方式实现console.clear()。;) 基于类似的原因我们也排除了console.group()、console.groupCollapsed()、console.groupEnd()、console.table()、console.dir()、console.dirXml()。

    Qt Creator中的脚本控制台仍在在开发当中。目前,QML对象与数组没有在树中显示。控制台仍然需要好好打磨,并在之后的版本中提供能多的功能。

    我们迫切地想知道你对于控制台所希望的功能列表以及使用经验。您可以通过 qtcreator邮件列表 或者IRC freenode服务器上的#qt-creator频道联系我们。

    Don't forget to share this post!

    Want to build something for tomorrow, join #QtPeople today! We have loads of cool jobs you don’t want to miss! http://qt.io/careers #builtwithQt #software #developers #coding #framework #tool #tooling #C++ #QML #engineers #sales #tech #technology #UI #UX #CX #Qt #Qtdev #global #openpositions #careers #job

    Henkilön Qt (@theqtcompany) jakama julkaisu