lldb命令if语句

时间:2016-02-16 01:01:15

标签: if-statement command breakpoints lldb

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

if ($value==2)
    printf "Value is 2\n"
end

但是在lldb中,如果声明'似乎无效:

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

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

1 个答案:

答案 0 :(得分:2)

在某些情况下,您可以使用表达式解析器来实现此效果,并且您可以使用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)命令脚本导入myModule.py

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

(lldb) breakpoint command add -F myModule.myCallback <BREAKPOINT_NUMBER>

这个python示例比正常情况稍微复杂一点,因为你正在查找lldb相当于gdb&#34;&#34;便利变量&#34;。如果您正在查找本地,则可以使用frame.FindVariable

有关详情请见:

"net" and "dotnet"