我想知道是否可以从bt
命令中获取选定项。例如,找到某个函数的调用函数。
其基本思想是在所讨论的函数上添加一个不间断断点,然后打印调用堆栈,例如调用函数,也可能是该函数的调用函数。
最后,这可能归结为过滤bt
命令的结果。过滤是必要的,以排除框架和运行时之间的方法。
最佳答案
今天,您需要使用一个小的python脚本来完成这项工作—这还不错。
(lldb) br se -n mach_msg
(lldb) br comm add -s python 1
Enter your Python command(s). Type 'DONE' to end.
> thread = frame.GetThread()
> frnum = 0
> for fr in thread.frames:
> print '% 2d %s' % (frnum, fr.GetFunctionName())
> frnum = frnum + 1
> frame.GetThread().GetProcess().Continue()
> DONE
我设置了断点(在本例中为
mach_msg
),向断点添加了一个命令(-s python
表示它是用脚本语言python编写的;我将此命令添加到断点1)。python代码自动与当前断点对象和帧对象一起提供(请参见lldb中的“
help break command add
”)。我从frame对象获取当前线程,然后遍历该线程的堆栈帧。lldb有很多关于可以对这些python对象执行哪些操作的内置信息。例如
(lldb) script help (lldb.SBFrame)
(lldb) script help (lldb.SBThread)
另见http://lldb.llvm.org/python-reference.html
关于objective-c - lldb:如何获取调用函数?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/10946284/