如何在调试时查看Xcode中的函数返回?

时间:2015-12-17 15:50:17

标签: ios xcode debugging lldb

enter image description here

例如,如果我想知道返回 [NSKeyedArchiver archiveRootObject:self.privateItems toFile:[self.itemArchPath absoluteString]];

我该怎么办?

3 个答案:

答案 0 :(得分:2)

在lldb和Xcode中,如果你“逐步退出”某个功能,当步出完成时,我们将显示你刚离开的功能的返回值。

在Xcode中,在步骤退出后停止,Locals视图的第一个元素(称为“返回值”)将是您刚刚退出的函数的返回值。

如果你在命令行lldb中,同样的东西会出现在停止打印的线程部分:

(lldb) fin
Process 43838 stopped
* thread #1: tid = 0x849c80, 0x0000000100000f5b SimpleStepOut`main(argc=1, argv=0x00007fff5fbff5b8) + 27 at main.c:18, queue = 'com.apple.main-thread', stop reason = step out
Return value: (int) $0 = 5

    frame #0: 0x0000000100000f5b SimpleStepOut`main(argc=1, argv=0x00007fff5fbff5b8) + 27 at main.c:18
   15   
   16   int main(int argc, const char * argv[]) {
   17       // insert code here...
-> 18       printf("Hello, World - %d!\n", return_five());
   19       return 0;
   20   }

注意,如果您自定义了帧格式,则可能没有此元素,而是thread.return-value

当一个“进/出”碰巧退出该功能时,这样做有点困难,所以现在它只有在您通过踩出来离开该功能时才有效。

答案 1 :(得分:1)

如果你想查看[NSKeyedArchiver archiveRootObject:self.privateItems toFile:[self.itemArchPath absoluteString]]的结果,你可以将其结果包装在一个简单的条件语句中并打印一条消息:该方法返回一个布尔值,因此它是真或假。 / p>

示例:

bool result = [NSKeyedArchiver archiveRootObject:self.privateItems toFile:[self.itemArchPath absoluteString]];
if (result) {
    NSLog(@"It worked!");
} else {
    NSLog(@"It failed!");
}

如果您的意思是要检查保存的内容,那么您应该打印保存到的路径并在Mac上查看(如果您正在使用模拟器)或尝试重新加载确保它符合您的预期。

答案 2 :(得分:1)

TwoStraws答案是正确的。

但是,如果您希望在调试时找到返回值(在{2}回答中result)并且仅在调试时,您可以进入archiveRootObject:toFile:的调用,然后点击F8。它将退出该函数,并且(通常)包含一个名为"返回"的伪局部变量。这将保留来自通话的返回值。