首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >XCode/ LLDB : LLDB会中断调用函数吗?

XCode/ LLDB : LLDB会中断调用函数吗?
EN

Stack Overflow用户
提问于 2015-01-08 20:58:51
回答 1查看 992关注 0票数 1

我在-[CALayer setSpeed:]上设置一个符号断点,我希望只有当函数被分隔函数调用时才触发断点

-[UIPercentDrivenInteractiveTransition _updateInteractiveTransition:percent:isFinished:didComplete:]

有办法这样做吗?

通过执行bt 2,我可以手动看到调用函数的值。是否有某种方法可以在断点条件中与此输出执行字符串比较?

谢谢!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-01-08 22:50:45

您可以在断点上使用一些python脚本来完成这一任务。这意味着,每次命中断点时,lldb将停止进程并恢复它--对于像objc_msgSend这样的非常热门的函数,这将极大地影响性能。

在您的homedir中创建一个python函数,如~/lldb/stopifcaller.py,其中包含以下内容

代码语言:javascript
复制
import lldb
def stop_if_caller(current_frame, function_of_interest):
  thread = current_frame.GetThread()
  if thread.GetNumFrames() > 1:
    if thread.GetFrameAtIndex(1).GetFunctionName() != function_of_interest:
      thread.GetProcess().Continue()

然后放

代码语言:javascript
复制
command script import ~/lldb/stopifcaller.py

~/.lldbinit文件中。

在lldb中这样使用它:

代码语言:javascript
复制
(lldb) br s -n bar
Breakpoint 1: where = a.out`bar + 15 at a.c:5, address = 0x0000000100000e7f
(lldb) br comm add --script-type python -o "stopifcaller.stop_if_caller(frame, 'foo')" 1

这样就完成了--只有当调用方帧是foo()时,断点1(在foo()上)才会停止。或者换个说法,如果调用方帧不是foo(),它就会继续。

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

https://stackoverflow.com/questions/27849384

复制
相关文章

相似问题

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