如何在 XCode 调试器中评估语句

Posted

技术标签:

【中文标题】如何在 XCode 调试器中评估语句【英文标题】:How to evaluate a statement in XCode debugger 【发布时间】:2013-09-08 20:37:05 【问题描述】:

所以我曾经使用过的所有其他 IDE,如果代码中的某些语句设置了断点,则有一种方法可以评估该语句以查看它返回的内容,即 Visual Studio 中的即时窗口,或使用观看菜单。 XCode 中是否有任何等价的东西,或者在一段代码中评估语句的某种方式?

例如:

if (CGRectContainsPoint([FGO BoundingBox], touchLocation))

返回 false,所以我想看看 [FGO BoundingBox] 的评估结果是什么,但除了更改代码以将其存储在中间变量中之外,我似乎无法弄清楚任何事情。假设我在 XCode 的这一行上有一个断点,那么查看该语句将返回什么的最简单方法是什么?

【问题讨论】:

【参考方案1】:

你可以试试:

po [FGO BoundingBox]

po NSStringFromCGRect([FGO BoundingBox])

也可以看看

help expression

在调试器中。

【讨论】:

这是返回 [no Objective-C description available] 的语句,如果我将它们放入代码中会返回一些东西,看起来有点奇怪。 @KevinDiTraglia - 变量必须在“范围内”才能使用“po”。例如,在执行po [FGO BoundingBox] 之前,您必须通过设置 FGO 的点来单步执行代码。 @KevinDiTraglia(请理解您将这些命令键入控制台窗口。) @HotLicks 它在范围内,输入 expression [FGO boundingBox] 效果很好,所以我想我只需要在表达式前面加上前缀。感谢您的回答(在输入 po [FGO boundingBox] 时返回上述错误)。 啊,是的!如果要打印的表达式不是 Objective-C 对象,只需使用“p”而不是“po”。 CGRect 不是一个对象,而是一个 C 结构体。【参考方案2】:

打破这一行,然后进入到“BoundingBox”函数并走到它的末尾(或者它返回的地方),你应该看看它返回了什么。

【讨论】:

我试过了,但它返回了另一个未由 IDE 评估的调用,似乎应该有一种简单的方法来查看将返回的内容,而无需深入了解方法调用。 @KevinDiTraglia - 您正在了解为什么合并语句而不是到处使用一些临时文件并不总是明智的。 @HotLicks 虽然我同意某些观点,但这似乎仍然是 IDE 的一个真正弱点。

以上是关于如何在 XCode 调试器中评估语句的主要内容,如果未能解决你的问题,请参考以下文章

Xcode 调试器显示不正确的变量值

如何在 XCode 调试器中调试 NSManagedObjects?

使用 Xcode LLDB 控制台在 Swift 中调试闭包

如何在 Xcode 调试器中查看 NSDictionary 变量的内容?

如何在 Xcode 中调试内部类

如何在 Xcode 4 中进行远程调试?