【问题标题】:lldb command if statementlldb 命令 if 语句
【发布时间】:2016-05-27 02:27:01
【问题描述】:
您好,我需要编写一个 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'.
谁能告诉我如何在断点命令中编写这个比较?谢谢!
【问题讨论】:
标签:
if-statement
command
breakpoints
lldb
【解决方案1】:
在某些情况下,您可以使用表达式解析器来实现此效果,并且您可以使用 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