我想知道是否可以从bt
命令中获取所选项目。例如。找到某个函数的调用函数。
这个想法基本上是在所讨论的函数中添加一个不间断的断点,然后打印callstack,例如调用函数,也许是调用函数。
最后,这可能归结为过滤bt
命令的结果。过滤将是必要的,以排除其间的框架和运行时方法。
答案 0 :(得分:6)
今天你需要使用一些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
”)。我从帧对象获取当前线程,然后迭代该线程的堆栈帧。
lldb有很多关于你可以对这些python对象做什么操作的内置信息。 e.g。
(lldb) script help (lldb.SBFrame)
(lldb) script help (lldb.SBThread)