2016-12-15 59 views
0

似乎lldb只能使用frame variable来反省变量,无论是调试信息还是方法调用的开始。当帧不在最上面时显示堆栈帧?

但是有时我们的代码会在某些系统或第三个库中断,我们可能想要反思这个变量或堆栈。我找到了这个框架的解决方案,读取汇编代码并手动内存堆栈。

但我不能找到一个快速的方法来获取框架的堆栈,当它不在最顶层。在lldb或Xcode中执行此操作的任何简单方法。


我发现project in github声称可以转储所有堆栈内存。那么我可以使用一些本地lldb命令来转储方法调用的堆栈内存吗?

+0

不确定“帧的堆栈段”是什么意思。 –

+0

它只是表示由方法调用创建的堆栈地址。 @JimIngham – Karl

回答

0

这听起来好像Python的API来LLDB将是你想要做最适合样的调查:

http://lldb.llvm.org/python_reference/index.html

你想要的终审法院,那么,你可以从一开始带有SBStackFrame.GetCFA()的Python API。输入函数时,CFA(呼叫帧地址)将成为堆栈帧地址。从那里到下一个较年轻的框架的CFA是该框架使用的堆栈内存。

您可以使用SBProcess.ReadMemory获取内存。

+0

感谢您的回答。为什么lldb只是把它作为命令添加? – Karl

+0

没有理由,但资源。这并不是所有常见的事情;这是我作为命令听到的第一个请求。如果你在lldb.llvm.org bug记者提交了一个改进请求,有人会在他们有时间的时候接受它。但是LLDB Python API的动机之一是,你可以添加这种功能,而不必等待lldb开发者的资源。 –