Anu*_*bis 1 command if-statement breakpoints lldb
您好,我需要编写一个lldb断点命令来计算一个值并打印出一个值。在gdb中我可以这样做:
if ($value==2)
printf "Value is 2\n"
end
Run Code Online (Sandbox Code Playgroud)
但在 lldb 中,“if 语句”似乎无效:
failed with error: 'if' is not a valid command.
error: Unrecognized command 'if'.
Run Code Online (Sandbox Code Playgroud)
谁能告诉我如何在断点命令中编写此比较?谢谢!
在某些情况下,您可以使用表达式解析器来实现此效果,并且可以使用 lldb Python 解释器来完成您想要执行的任何复杂工作,以响应断点命中。鉴于 Python 支持的相当深入的水平,我们认为如果您不了解 Python,您最好花时间学习一点,这样您就可以真正编写 lldb 脚本,而不是学习我们会提出的任何小微语言和。
无论如何,使用解释器,你可以这样做:
expr if ($value == 2) { (int) printf("Value is 2\n"); }
Run Code Online (Sandbox Code Playgroud)
使用 python 解释器,您可以编写如下回调:
def myCallback (frame, breakpoint_location, dict):
value = frame.FindValue("$value", lldb.eValueTypeConstResult)
if (value.unsigned == 10):
print "Value is 10"
Run Code Online (Sandbox Code Playgroud)
将其放入名为 myModule.py 的文件中,执行以下操作:
(lldb) 命令脚本 import myModule.py
然后将命令分配给断点:
(lldb) breakpoint command add -F myModule.myCallback <BREAKPOINT_NUMBER>
Run Code Online (Sandbox Code Playgroud)
这个 python 示例比正常情况稍微复杂一些,因为您正在查找 lldb 相当于 gdb 的“便利变量”。如果您正在查找本地人,您可以使用frame.FindVariable.
有关此内容的更多详细信息,请访问:
http://lldb.llvm.org/python-reference.html