Xcode Debugger:变量的视图值

时间:2011-01-19 12:22:16

标签: iphone objective-c xcode debugging ios

我在UITableViewController中的代码:

delegate.myData = [myData objectAtIndex:indexPath.row];

如何在调试器中查看delegate.myDataindexPath.row的值? delegate.myData应为数组,indexPath.rowint。我只能看到对象delegateindexPath的内存地址,但myDatarow在哪里?

alt text

7 个答案:

答案 0 :(得分:127)

选中此How to view contents of NSDictionary variable in Xcode debugger?

我也用

po variableName
print variableName
在控制台中

在您的情况下,可以执行

print [myData objectAtIndex:indexPath.row]  

po [myData objectAtIndex:indexPath.row]

答案 1 :(得分:22)

我同意其他海报,Xcode作为一个开发环境应该包含一个简单的方法来调试变量。嗯,好消息,有一个!

在搜索并没有找到关于如何在Xcode中调试变量的简单答案/教程之后,我去探索了Xcode本身并发现这(至少对我来说)非常有用的发现。

如何在Xcode 4.6.3中轻松调试变量

在Xcode的主屏幕中,确保通过单击屏幕截图中显示的右上角按钮来查看底部调试区域。

Debug Area button

Debug Area in Xcode 4.6.3

现在设置一个断点 - 代码中您希望程序暂停的行,方法是单击代码区域的边框。

Breakpoint

现在在调试区域中查找此按钮并单击中间的按钮。您会注意到您的区域现在分成两部分。

Split Debug Area

Should look like this

现在运行您的应用程序。

在执行程序期间到达第一个断点时,您将在左侧看到该断点处可用的所有变量。

Search Field

您可以展开变量上的左箭头以获得更多细节。甚至可以使用搜索字段来隔离您想要的变量,并在您实时看到它变化时,进入"断点的范围。

Step Into

在调试区域的右侧,您可以使用鼠标右键单击所需变量,发送以根据需要打印变量。

Contextual Menu

正如您所看到的,该上下文菜单中充满了非常有趣的调试选项。例如已经使用类型化命令建议的 Watch ,甚至编辑值... ,它会改变变量的运行时值!

答案 2 :(得分:19)

你也可以:

  1. 设置断点以暂停执行。
  2. 对象必须位于执行范围内
  3. 将鼠标指针移到对象或变量上
  4. 将出现黄色工具提示
  5. 将鼠标移到工具提示
  6. 点击上下两个小箭头
  7. 将弹出上下文菜单
  8. 选择“打印描述”,它将执行[对象描述]
  9. 说明将显示在控制台的输出
  10. 恕我直言,有点隐蔽和麻烦...

答案 3 :(得分:9)

您的混淆源于声明的属性不是(必须命名为)(实例)变量的事实。

表达

indexPath.row

相当于

[indexPath row]

和作业

delegate.myData = [myData objectAtIndex:indexPath.row];

相当于

[delegate setMyData:[myData objectAtIndex:[indexPath row]]];

假设合成属性的标准命名。

此外,delegate可能被声明为id<SomeProtocol>类型,即编译器无法在此时为delegate提供实际类型信息,并且调试器依赖于编译时提供的信息。由于id是泛型类型,因此delegate中没有关于实例变量的编译时信息。

这些是您没有将myDatarow视为变量的原因。

如果您想检查发送-row-myData的结果,可以使用命令ppo

p (NSInteger)[indexPath row]
po [delegate myData]

或使用表达式窗口(例如,如果您知道delegate的实际类型为MyClass *,则可以添加表达式(MyClass *)delegate,或右键单击delegate },选择View Value as…并输入delegate的实际类型(例如MyClass *)。

话虽如此,我同意调试器可能更有帮助:

  • 可以选择告诉调试器窗口使用运行时类型信息而不是编译时信息。它会减慢调试器的速度,但会提供有用的信息;

  • 声明的属性可以显示在名为properties的组中,并允许(可选)直接在调试器窗口中进行检查。这也会减慢调试器的速度,因为需要发送消息/执行方法以获取信息,但也会提供有用的信息。

答案 4 :(得分:6)

您可以在运行时将值打印到控制台窗口。以下是步骤:

  1. 放置一个您想要获取值的断点
  2. 现在执行逐步调试。
  3. 将光标放在要在运行时检查其值的变量/委托上。
  4. 现在这将显示变量/委托的描述
  5. 点击“i”将显示详细说明
  6. 这也会将细节打印到控制台窗口。
  7. Screenshot for printing details on console window

答案 5 :(得分:1)

这有点复杂。这些对象是自定义类或结构体,在Xcode中查找它们并不像在其他开发环境中那样容易。

如果我是你,我会通过一些描述来记录您想要看到的值。

即:

NSLog(@"Description of object & time: %i", indexPath.row);

答案 6 :(得分:1)

尝试运行 - >显示 - >表达式

输入数组的名称或您要查找的任何内容。