检查lldb中函数的返回值

时间:2014-01-03 10:57:27

标签: debugging return-value lldb

是否可以在lldb中检查函数的返回值,假设返回值未分配给变量?

3 个答案:

答案 0 :(得分:17)

退出该功能,并在检查器中查看返回值。这是我的截图:

enter image description here

有关详细信息,请参阅文章:https://gist.github.com/schwa/7812916

答案 1 :(得分:14)

答案是错误的,所以我会发布正确的答案。

要检查返回值,您需要(lldb) finish(缩写为thread step-out)函数返回要检查的值,然后使用:

(lldb) thread info

这将为您提供类似于此的输出:

thread #1: tid = 0x28955, (frame variables  and stuff), stop reason = step out
Return value: (NSMenu *) $3 = 0x0000600000065280

有了这个,你可以:

(lldb) po $3

请注意,gdb只使用finish检查返回值的方法不会为lldb打印任何内容。

此外,SFeng指出如果您使用Xcode,您可以在退出之前的功能或方法后在UI检查器中看到它。

答案 2 :(得分:0)

您可以在函数的返回点上设置一个断点(类似于thread step-out)并打印出返回值。试试这个(在ARM平台上工作):

#1 (lldb) br set -n "__FUNCTION_NAME_YOUR_WANT_TO_TRACE" -K false
#2 (lldb) br set -a $lr -o true -G true -C "po $x0"

在#1处,我们在__FUNCTION_NAME_YOUR_WANT_TO_TRACE上创建一个断点,\ -K false确保不跳过汇编中的序言。

由于我们不跳过序言,所以当第一个断点命中时,我们可以检索此函数的返回地址(blble指令将返回地址设置为链接寄存器,也称为{{1 }}。

这时,我们在#2的返回地址处创建一个断点。

lr表示这是一个一次性断点,击中后会自动删除;

-o true表示自动继续;

-G true意味着向此断点添加-C "po $x0"命令,以将内容打印到x0寄存器中,该寄存器存储定位功能的返回值。