评估表达式
要访问在Locals视图中不可见的全局数据,或计算算术表达式或函数调用的值,请在Expressions 视图中使用表达式求值器。
例如,如果在源文件中定义static int staticVar = 42;
,然后添加staticVar
作为已评估表达式,那么当调试器在源文件中停止调试时,就会在视图中看到42。
您还可以使用表达式评估器作为快捷方式,来访问在 locals 树中嵌套较深的项目。
添加表达式评估器
要添加表达式评估器,可将代码编辑器中的表达式拖到Expressions 视图中。
也可以
- 双击Expressions 或Locals 视图。
- 从上下文菜单中选择Add New Expression Evaluator 。
在New Evaluated Expression 对话框中输入表达式:
已评估的表达式集会保存在会话中。
只要当前帧发生变化,就会重新评估表达式评估器。每次都会调用表达式中使用的函数,即使这些函数有副作用。
注意: 评估表达式的速度较慢,因此在使用后应删除表达式评估器。
JavaScript 表达式
QML 调试器可评估 JavaScript 表达式。
C 和 C++ 表达式
CDB、GDB 和 LLDB 支持评估简单的 C 和 C++ 表达式,如由简单值和指针组成的算术表达式。
根据后端和具体位置的不同,还可以评估某些函数调用。CDB 在这方面是最有限的后端。
函数调用
只有实际编译到调试后的可执行文件或可执行文件使用的库中的函数才能被调用。内联函数(如大多数operator[]
标准容器的实现)通常不可用。
注意: 当表达式中包含函数调用时,任何事情都可能发生,包括破坏应用程序的状态,或使用应用程序的权限执行任意操作。
范围语法
使用 GDB 或 LLDB 作为后端时,可以使用特殊的范围语法,用一个表达式显示多个值。foo[a..b]
形式的子表达式会被拆分成一系列单独求值的表达式foo[a], ..., foo[b]
。
复合变量
你可以展开结构或类类型的复合变量来显示其成员。由于还能看到变量值和类型,因此可以检查和遍历对象数据的底层布局。
优化构建
GDB 和 LLDB 以及Qt Creator 调试器也适用于 Linux 和 macOS 上的优化构建。优化可能会导致指令重新排序或删除某些局部变量,从而导致Locals 和Expressions 视图显示意外数据。
GCC
GCC 的调试信息没有包含足够的变量初始化时间信息。因此,Qt Creator 无法判断局部变量的内容是真实数据还是初始噪声。如果QObject 出现未初始化的情况,其值会被报告为not in scope 。不过,并非所有未初始化对象都能被识别为未初始化对象。
表达式视图操作
右键单击Expressions 视图可选择以下操作:
Copyright © The Qt Company Ltd. and other contributors. Documentation contributions included herein are the copyrights of their respective owners. The documentation provided herein is licensed under the terms of the GNU Free Documentation License version 1.3 as published by the Free Software Foundation. Qt and respective logos are trademarks of The Qt Company Ltd in Finland and/or other countries worldwide. All other trademarks are property of their respective owners.