【问题标题】: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

    【讨论】:

      猜你喜欢
      • 2021-06-21
      • 2021-02-12
      • 2012-07-09
      • 1970-01-01
      • 2018-04-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-10-02
      相关资源
      最近更新 更多