Debugging 检查lldb中函数的返回值
假设返回值未分配给变量,是否可以在lldb中检查函数的返回值?退出函数,并查看inspector中的返回值。这是我的截图: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),然后使用:
(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"