Xcode Debugger:变量的视图值

Man*_*nni 99 iphone debugging xcode objective-c ios

我在UITableViewController中的代码:

delegate.myData = [myData objectAtIndex:indexPath.row];
Run Code Online (Sandbox Code Playgroud)

我怎样才能看到的值delegate.myDataindexPath.row在调试?delegate.myData应该是一个数组和indexPath.row一个int.我只能看到物体的内存地址delegate,并indexPath在哪儿呢?myDatarow

替代文字

And*_*riy 136

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

我也用

po variableName
print variableName
Run Code Online (Sandbox Code Playgroud)

在控制台中.

在您的情况下,可以执行

print [myData objectAtIndex:indexPath.row]  
Run Code Online (Sandbox Code Playgroud)

要么

po [myData objectAtIndex:indexPath.row]
Run Code Online (Sandbox Code Playgroud)

  • try print(int)[indexPath row] (4认同)

小智 22

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

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

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

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

调试区域按钮

Xcode 4.6.3中的调试区域

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

断点

现在在Debug Area中查找这个按钮并单击中间的按钮.您会注意到您的区域现在分成两部分.

拆分调试区域

应该是这样的

现在运行您的应用程序

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

搜索字段

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

踏入

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

上下文菜单

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


Lig*_*Man 19

你也可以:

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

恕我直言有点隐藏和繁琐......


小智 9

您的困惑源于声明的属性不是(必须命名为相同)(实例)变量的事实.

表达

indexPath.row
Run Code Online (Sandbox Code Playgroud)

相当于

[indexPath row]
Run Code Online (Sandbox Code Playgroud)

和任务

delegate.myData = [myData objectAtIndex:indexPath.row];
Run Code Online (Sandbox Code Playgroud)

相当于

[delegate setMyData:[myData objectAtIndex:[indexPath row]]];
Run Code Online (Sandbox Code Playgroud)

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

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

这些是您没有看到myDatarow作为变量的原因.

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

p (NSInteger)[indexPath row]
po [delegate myData]
Run Code Online (Sandbox Code Playgroud)

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

话虽这么说,我同意调试器可能会更有帮助:

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

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


Jay*_*bey 6

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

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

在控制台窗口上打印详细信息的屏幕