你如何检查lldb中的右值(临时对象)?

时间:2015-08-12 01:18:13

标签: debugging lldb temporary rvalue

设置断点时,例如 lldb 中的b main,很容易看到当前帧中的变量:

(lldb) frame variables

但是你如何检查临时物体?说我有这些功能

std::string func2() {...}
void func(const std::string& a) {...}

我打电话给

func(func2());

如何查看func2()创建的临时变量?可能吗?上面的命令似乎只显示命名变量。

1 个答案:

答案 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,它还会在本地视图的顶部添加一个项目,显示您刚刚离开的函数的返回值。