嗨,我需要编写一个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'.有人能告诉我如何在我的断点命令中写这个比较吗?谢谢!
发布于 2016-02-16 19:25:48
在某些情况下,您可以使用表达式解析器来实现这一效果,并且可以使用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的“方便变量”。如果你是在查一个本地的,你可以使用frame.FindVariable。
有关这方面的更多详情,请访问:
http://lldb.llvm.org/python-reference.html
https://stackoverflow.com/questions/35421885
复制相似问题