If statement lldb命令if语句

If statement lldb命令if语句,if-statement,command,breakpoints,lldb,If Statement,Command,Breakpoints,Lldb,您好,我需要编写一个lldb断点命令来计算一个值并打印出一个值。 在gdb中,我可以这样做: if ($value==2) printf "Value is 2\n" end 但在lldb中,“if语句”无效,似乎: failed with error: 'if' is not a valid command. error: Unrecognized command 'if'. 有人能告诉我如何在断点命令中编写这个比较吗?谢谢 在某些情况下,您可以使用表达式解析器来实现这种效果,并且

您好,我需要编写一个lldb断点命令来计算一个值并打印出一个值。 在gdb中,我可以这样做:

if ($value==2)
    printf "Value is 2\n"
end
但在lldb中,“if语句”无效,似乎:

failed with error: 'if' is not a valid command.
error: Unrecognized command 'if'.

有人能告诉我如何在断点命令中编写这个比较吗?谢谢

在某些情况下,您可以使用表达式解析器来实现这种效果,并且您可以使用lldb Python解释器来执行任何复杂的工作,以响应断点命中。鉴于对Python的支持相当深入,我们认为如果您不懂Python,最好花点时间学习一下,这样您就可以真正编写lldb,而不是学习我们将提出的任何微语言

无论如何,使用解释器,您可以执行以下操作:

expr if ($value == 2) { (int) printf("Value is 2\n"); }
使用python解释器,您可以编写如下回调:

def myCallback (frame, breakpoint_location, dict):
    value = frame.FindValue("$value", lldb.eValueTypeConstResult)
    if (value.unsigned == 10):
        print "Value is 10"
将其放入名为myModule.py的文件中,执行以下操作:

(lldb)命令脚本import myModule.py

然后使用以下命令将命令分配给断点:

(lldb) breakpoint command add -F myModule.myCallback <BREAKPOINT_NUMBER>
(lldb)断点命令add-F myModule.myCallback
这个python示例比正常情况稍微复杂一点,因为您正在查找lldb与gdb的“便利变量”的等价物。如果您正在查找本地文件,则可以使用
frame.FindVariable

有关详情,请访问: