Swift 的 LLDB:访问计算 属性 或在类型摘要 Python 脚本中执行函数调用
LLDB for Swift: Access computed property or perform function call in type summary Python script
当我使用 Python 脚本创建自定义类型摘要时,可以使用 value.GetChildMemberByName("<child-name>")
访问 ivars。但是,这不适用于计算属性或函数。
使用frame variable
命令,生成摘要的脚本可以计算当前帧中的表达式(例如value.GetFrame().EvaluateExpression(value.GetName() + ".description")
)
然而,当使用 p <some-expression>
/expression -- <some-expression>
时,这将不起作用,因为没有框架,因此上述语句将无法产生任何结果。
在使用 p
(expression --
) 时,有没有办法在类型摘要中调用函数或计算计算属性?
EvaluateExpression
函数在目标和框架上可用。试试 value.GetTarget().EvaluateExpression(...)
.
您可能会使用 SBValue.CreateValueFromExpression 代替框架或目标 EvaluateExpression 调用数据格式化程序。
SBValues 会记住定义它们的上下文,并且 SBValue.CreateValueFromExpression 将该上下文返回给表达式计算器。由于 Variable 格式化程序总是接收到它们所作用的 SBValue,CreateValueFromExpression 允许一种简单的方法将该上下文转发到新表达式。
当我使用 Python 脚本创建自定义类型摘要时,可以使用 value.GetChildMemberByName("<child-name>")
访问 ivars。但是,这不适用于计算属性或函数。
使用frame variable
命令,生成摘要的脚本可以计算当前帧中的表达式(例如value.GetFrame().EvaluateExpression(value.GetName() + ".description")
)
然而,当使用 p <some-expression>
/expression -- <some-expression>
时,这将不起作用,因为没有框架,因此上述语句将无法产生任何结果。
在使用 p
(expression --
) 时,有没有办法在类型摘要中调用函数或计算计算属性?
EvaluateExpression
函数在目标和框架上可用。试试 value.GetTarget().EvaluateExpression(...)
.
您可能会使用 SBValue.CreateValueFromExpression 代替框架或目标 EvaluateExpression 调用数据格式化程序。
SBValues 会记住定义它们的上下文,并且 SBValue.CreateValueFromExpression 将该上下文返回给表达式计算器。由于 Variable 格式化程序总是接收到它们所作用的 SBValue,CreateValueFromExpression 允许一种简单的方法将该上下文转发到新表达式。