有没有办法在 LLDB 中打印 if 语句或任何其他条件表达式的计算结果?

Is there a way to print what an if statement or any other conditional expression evaluates to in LLDB?

有没有办法在 LLDB 中打印 if 语句的条件计算结果?或者在程序执行的某个时刻任何条件表达式的值?

我知道如何使用 varprint 打印变量,如何使用 parray 10 arr 打印数组的值, 如何通过退出函数和 thread info 来获取函数的 return 值,但我 不知道如何获取条件表达式的值。

非常感谢任何调试提示。

编辑:我刚刚从下面的评论中了解到,可以将 print 与某些条件表达式一起使用以查看其计算结果。 尽管如此,是否有一些命令允许在不输入整个条件的情况下看到它,并让 lldb 从变量的状态再次评估它,但打印特定条件在程序中的某个特定点评估的内容?

没有这样的命令。

很难编写一个完全通用的代码,因为单独的源代码行通常不是完整的语句,在这种情况下我们必须做一些明智的事情,等等...

另外,我不认为你真的想要“将这一行作为表达式求值”,你想要更复杂的东西。我想你有这样的源代码行:

   if (!strncmp(token_table[i].token, input , token_table[i].len))) {

这不是 C 中的表达式,因此我们无法直接计算整个源代码行。你真的想要“在这个源代码行中找到任何看起来像条件​​的东西,把它拉出来并评估它。”这在上面的简单情况下看起来很容易处理,但在一般情况下,这会开始变得复杂,并且很难做到正确。

OTOH,编写一个仅处理 if 条件的简单实例的 Python 命令会非常简单,使用 SB API 提取源代码行,然后一些Python 解析以提取条件,然后 SBFrame.EvaluateExpression 对其进行评估。因此,您当然可以使用 Python API 来制作足以满足您的目的的东西。

有关 lldb 中 Python 可供性的更多详细信息,请参见此处:

https://lldb.llvm.org/use/python-reference.html

和 lldb API 记录在此处:

https://lldb.llvm.org/python_reference/index.html