我在-[CALayer setSpeed:]上设置了一个符号断点,并且我希望仅在特定函数调用该函数时才触发该断点-[UIPercentDrivenInteractiveTransition _updateInteractiveTransition:percent:isFinished:didComplete:]有什么办法吗?我可以通过bt 2手动查看调用函数的值。是否有某种方法可以在断点条件中执行与此输出的字符串比较?谢谢!
-[CALayer setSpeed:]
-[UIPercentDrivenInteractiveTransition _updateInteractiveTransition:percent:isFinished:didComplete:]
bt 2
zbwhf8kr1#
您可以在断点上编写一些python脚本来实现这一点,这意味着每次遇到断点时,lldb都会停止进程,然后重新开始--对于像objc_msgSend这样的热门函数来说,这将极大地影响性能。在homedir中创建一个包含以下内容的python函数,例如~/lldb/stopifcaller.py
~/lldb/stopifcaller.py
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()
那就把
command script import ~/lldb/stopifcaller.py
在~/.lldbinit文件中。在lldb中这样使用它:
~/.lldbinit
(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
这样就完成了--断点1(在bar()上)只有在调用者帧是foo()时才会停止,或者换句话说,如果调用者帧不是foo(),它就会继续。
bar()
foo()
1条答案
按热度按时间zbwhf8kr1#
您可以在断点上编写一些python脚本来实现这一点,这意味着每次遇到断点时,lldb都会停止进程,然后重新开始--对于像objc_msgSend这样的热门函数来说,这将极大地影响性能。
在homedir中创建一个包含以下内容的python函数,例如
~/lldb/stopifcaller.py
那就把
在
~/.lldbinit
文件中。在lldb中这样使用它:
这样就完成了--断点1(在
bar()
上)只有在调用者帧是foo()
时才会停止,或者换句话说,如果调用者帧不是foo()
,它就会继续。