设置断点时,例如 lldb 中的b main
,很容易看到当前帧中的变量:
(lldb) frame variables
但是你如何检查临时物体?说我有这些功能
std::string func2() {...}
void func(const std::string& a) {...}
我打电话给
func(func2());
如何查看func2()
创建的临时变量?可能吗?上面的命令似乎只显示命名变量。
答案 0 :(得分:1)
如果您步入INTO func2 - 然后使用“finish”命令再次退出,lldb将显示您退出的函数的返回值。例如:
(lldb) br s -n func2
Breakpoint 2: where = step-into`func2() + 18 at step-into.cpp:12, address = 0x0000000100000d62
(lldb) c
Process 29307 resuming
Process 29307 stopped
* thread #1: tid = 0x300436, function: func2() , stop reason = breakpoint 2.1
frame #0: 0x0000000100000d62 step-into`func2() at step-into.cpp:12
9 std::string
10 func2()
11 {
-> 12 return std::string("some string");
13 }
14
15 int
好的,现在你已经停止了这个功能,所以当你finish
输出lldb时会收集返回值并在线程打印中显示它:
(lldb) fin
Process 29307 stopped
流程29333已停止 * thread#1:tid = 0x300e94,0x0000000100000def step-into`main + 31 at step-into.cpp:18,queue ='com.apple.main-thread',stop reason = step out 返回值:(std :: __ 1 :: basic_string,std :: __ 1 :: allocator>)$ 0 =“some string”
frame #0: 0x0000000100000def step-into`main at step-into.cpp:18
15 int
16 main ()
17 {
-> 18 func(func2());
19 return 0;
20 }
或者如果您有一个没有返回值的自定义'线程格式',您可以通过SB API获取它:
(lldb) script print lldb.thread.GetStopReturnValue()
(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >) $0 = "some string"
如果您正在使用Xcode,它还会在本地视图的顶部添加一个项目,显示您刚刚离开的函数的返回值。