您好我需要编写 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'.
有人能告诉我如何在断点命令中编写这个比较吗?谢谢!
答案 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
。
有关详情请见: