有没有办法在 LLDB 中打印 if 语句或任何其他条件表达式的计算结果?
Is there a way to print what an if statement or any other conditional expression evaluates to in LLDB?
有没有办法在 LLDB 中打印 if 语句的条件计算结果?或者在程序执行的某个时刻任何条件表达式的值?
我知道如何使用 var
或 print
打印变量,如何使用 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 记录在此处:
有没有办法在 LLDB 中打印 if 语句的条件计算结果?或者在程序执行的某个时刻任何条件表达式的值?
我知道如何使用 var
或 print
打印变量,如何使用 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 记录在此处: