首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >lldb命令if语句

lldb命令if语句
EN

Stack Overflow用户
提问于 2016-02-16 01:01:14
回答 1查看 690关注 0票数 1

嗨,我需要编写一个lldb断点命令,它计算一个值并打印一个值。在gdb中,我可以这样做:

代码语言:javascript
复制
if ($value==2)
    printf "Value is 2\n"
end

但在lldb中,“if-语句”似乎无效:

代码语言:javascript
复制
failed with error: 'if' is not a valid command.
error: Unrecognized command 'if'.

有人能告诉我如何在我的断点命令中写这个比较吗?谢谢!

EN

回答 1

Stack Overflow用户

发布于 2016-02-16 19:25:48

在某些情况下,您可以使用表达式解析器来实现这一效果,并且可以使用lldb Python解释器来处理任何复杂的工作,以响应断点命中。考虑到Python支持的深度,我们觉得如果你不懂Python,你最好花点时间来学习它,这样你才能真正地编写lldb脚本,而不是学习我们想出的任何一种微型语言。

总之,使用解释器,您可以例如:

代码语言:javascript
复制
expr if ($value == 2) { (int) printf("Value is 2\n"); }

使用python解释器,您可以编写如下回调:

代码语言:javascript
复制
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

然后将命令分配给您的断点:

代码语言:javascript
复制
(lldb) breakpoint command add -F myModule.myCallback <BREAKPOINT_NUMBER>

那个python示例比通常的要复杂一些,因为您正在查找lldb的等效于gdb的“方便变量”。如果你是在查一个本地的,你可以使用frame.FindVariable

有关这方面的更多详情,请访问:

http://lldb.llvm.org/python-reference.html

票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/35421885

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档