Debugging 检查lldb中函数的返回值

Debugging 检查lldb中函数的返回值,debugging,return-value,lldb,Debugging,Return Value,Lldb,假设返回值未分配给变量,是否可以在lldb中检查函数的返回值?退出函数,并查看inspector中的返回值。这是我的截图: 有关更多详细信息,请参阅文章:答案是错误的,所以我将发布正确的答案 要检查返回值,您需要从要检查的返回值函数中完成(lldb),然后使用: (lldb) thread info 这将为您提供类似以下内容的输出: thread #1: tid = 0x28955, (frame variables and stuff), stop reason = step out R

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

退出函数,并查看inspector中的返回值。这是我的截图:


有关更多详细信息,请参阅文章:

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

要检查返回值,您需要从要检查的返回值函数中完成(lldb),然后使用:

(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检查器中看到它。

您可以在函数的返回点上设置断点(类似于
线程退出
),并打印出返回值。试试这个(在ARM平台上工作):

在#1,我们在"函数名"上创建一个断点,您希望"跟踪",\
-K false
确保我们不会跳过汇编中的序言

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

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

-o true
表示它是一个一次性断点,点击后会自动删除

-G true
表示自动继续


-C“po$x0”
意味着向该断点添加一个
po$x0
命令,以打印x0寄存器中的内容,该寄存器存储目标函数的返回值。

注意,只有当您以“退出”退出函数时,此命令才起作用。lldb还没有跟踪所有的“跳过”和“插入”以查看它们中是否有一个退出了某个函数。这只回答了XCode的问题,而不是lldbIm在
finish
之后没有看到任何打印的信息。但是
po$x0
似乎有权利value@HariKaramSingh这正是我所说的,FinishforLLDB不打印任何内容。@tboyce12这对Xcode 8.3.2中的Swift不起作用。不知道其他版本。@solgar您仅次于clive1。不适用于最新的clang/lldb lldb-1000.11.38.2
#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"