我正在研究一个大型 Qt/C++ 项目,并试图根据源代码并在调试器的帮助下找到解决它的方法。我并不是在寻求有关该项目的帮助,但我对调试器在以下情况下的行为方式感到困惑。
有一个 if 语句如下:
if (multiInstancesProvider()->isMainInstance()) {
splashScreen = new SplashScreen(SplashScreen::Default);
}
我认为,这的确切含义对于我的问题并不重要。我的问题如下:
当我在“if”行上设置断点并单步执行时,标记移动到“splashScreen”行。我认为这意味着此时的条件评估为
true
。但是,当我在“表达式”视图的“名称”列中输入条件 multiInstancesProvider()->isMainInstance()
时,它会在“值”列中给出 <no such value>
。
经过一些实验,我发现如果我在 if 语句之前插入一行:
bool condition = multiInstancesProvider()->isMainInstance()
如果我在“表达式”视图中输入
condition
,它确实会在值列中给出 true
。
这是否意味着调试器不能计算表达式,只能计算变量?或者表达式有特殊的语法吗?感谢您的帮助!
要在 Qt 调试器中计算表达式,请使用 Qt Creator 中的“表达式”或“局部变量”视图。调试时,您可以在“表达式”窗口中输入变量名称、对象属性或自定义表达式来监视它们的值。或者,您可以右键单击代码中的变量或对象,然后选择“添加表达式求值器”以在调试期间跟踪其值。 “局部”视图还显示局部变量的当前状态,使您可以一目了然地检查和评估它们。这些工具使您能够交互式地检查代码行为并实时诊断问题。